我无法使用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对象,因为它适合我的所有其他代码。
答案 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