Sql server 如何使用SQLAlchemy为MSSQL创建临时表?

Sql server 如何使用SQLAlchemy为MSSQL创建临时表?,sql-server,sqlalchemy,Sql Server,Sqlalchemy,我尝试了以下使用SQLA为MSSQL创建临时表的方法: table_name = "#foo" meta = MetaData(bind = session.bind) table = Table(quoted_name(table_name, quote=False), meta, Column('a_number', Integer), Column('devi

我尝试了以下使用SQLA为MSSQL创建临时表的方法:

    table_name = "#foo"
    meta = MetaData(bind = session.bind)
    table = Table(quoted_name(table_name, quote=False),
                  meta,
                  Column('a_number', Integer),
                  Column('device_Id', Integer),
                  Column('cost', Integer)
                  )

    table.create()
执行此操作时没有错误,但如果使用尝试访问表的SQL语句来跟踪,则会出现错误。(错误表明#foo不存在)

另外,如果我在MSSQL会话中查看temp表,则没有提到该表,进一步证明它不存在

请注意,我不认为这是一个连接问题-如果我注释掉上面的表。create()并“手动”创建表,就像在session.execute(“create#foo..”)中那样成功,随后的插入和读取也会成功。所以我想我一直都在同一条线上。此外,我可以在调试器中单步执行此操作,并间歇性地请求我的MSSQL会话ID,然后返回相同的ID(这意味着从MSSQL的角度来看,我也在同一个会话上)

稍后的测试:我启用了完整的SQLAlchemy调试,我注意到它table.create()导致在CREATETABLE语句之后发出“commit”。不知何故,此提交导致临时表变得不可访问。我进行了实验,发现如果没有发出此提交,那么table.create()就会工作,并且可以在后续语句中访问临时表

这是我的“变通方法”,直到我弄清楚为什么会发出提交和/或为什么提交会导致临时表“消失”:

在上述方法中,CreateTable返回实际的SQL创建语法,然后通过session.execute(不发出提交)执行该语法。

几点:
->检查是否正确创建引擎。检查链接并查找Microsoft SQL Server标题。链接:

->检查元数据是否绑定到引擎。

我们使用的是连接字符串,其中确实包含“mssql+pyodb”“mssql+pyodbc://?odbc_connect=DRIVER={FreeTDS};TDS_Version=8.0;SERVER=XXX;PORT=1433;UID=XXX;PWD=XX;DATABASE=XXX”My metadata.bind引用了一个似乎有效的引擎对象。即,它的url字段包含上面的连接字符串…请不要在注释中飞溅代码。它们是无用的,因为格式不够健壮。是否更新问题?
    table_name = "#foo"
    meta = MetaData(bind = session.bind)
    table = Table(quoted_name(table_name, quote=False),
                  meta,
                  Column('a_number', Integer),
                  Column('device_Id', Integer),
                  Column('cost', Integer)
                  )

    session.execute(CreateTable(table))