SQLAlchemy无法自动加载mssql临时表

时间:2020-08-07 15:47:17

标签: python sql-server pandas sqlalchemy pyodbc

我无法使用SQLAlchemy连接到在SQL Server上创建的临时表。

我连接到服务器

engine = create_engine(URL, poolclass=StaticPool)

我用熊猫数据框中的数据填充临时表:

df_tmp.to_sql('#table_test', con=engine)

该表存在于服务器上:

res = engine.execute('SELECT * FROM tempdb..#table_test')
print(res)

返回我的数据元组列表。但是,当我尝试创建SQLAlchemy表时,它失败并显示NoSuchTableError

from sqlalchemy import create_engine, MetaData, Table
metadata = MetaData(engine)
metadata.create_all()
table = Table('#table_test', metadata, autoload=True, autoload_with=engine)

我也尝试过这样做,它给出了相同的错误:

table = Table('tempdb..#table_test', metadata, autoload=True, autoload_with=engine)

我还尝试使用SQL命令创建空白表,当我尝试使用SQLAlchemy读取空白表时,也会出现相同的错误:

engine.execute('CREATE TABLE #table_test (id_number INT, name TEXT)')

SQLAlchemy是否支持临时表?如果是这样,这里出了什么问题?我希望尽可能将临时表作为sqlalchemy.schema.Table对象,因为它适合我的所有其他代码。

1 个答案:

答案 0 :(得分:3)

(关于问题的评论)

实际上,这是对SQLAlchemy的mssql方言检查表是否存在的当前机制的限制。它向INFORMATION_SCHEMA.TABLES查询当前目录(数据库),并且#temp表未显示在该视图中。如果我们USE tempdb然后从那里查询INFORMATION_SCHEMA.TABLES,它们确实会以一种流行的方式并且以一种不是特别有用的方式出现。

目前,我已经创建了一个GitHub问题here,以查看我们是否可以对此进行改进。

更新2020-09-01

针对上述GitHub问题的更改已合并到SQLAlchemy的master分支中,并将包含在1.4版中。如果您想在1.4正式发布之前利用此功能,可以通过以下方式安装SQLAlchemy:

pip安装git + https://github.com/sqlalchemy/sqlalchemy.git