SQLAlchemy 无法自动加载 mssql 临时 table

SQLAlchemy cannot autoload an mssql temporary table

我无法连接到使用 SQLAlchemy 在 SQL 服务器上创建的临时 table。

我连接到服务器:

engine = create_engine(URL, poolclass=StaticPool)

我用 pandas 数据帧中的数据填充临时 table:

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

服务器上存在table:

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

其中 returns 我的数据的元组列表。但是当我尝试制作 SQLAlchemy table 时,它失败了 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 命令创建一个空白 table,当我尝试使用 SQLAlchemy:

读取它时出现相同的错误
engine.execute('CREATE TABLE #table_test (id_number INT, name TEXT)')

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

(回复:对问题的评论)

实际上,这是 SQLAlchemy 的 mssql 方言检查 table 是否存在的当前机制的限制。它查询 INFORMATION_SCHEMA.TABLES 当前目录(数据库),并且 #temp table 不会出现在该视图中。如果我们 USE tempdb 然后从那里查询 INFORMATION_SCHEMA.TABLES,它们确实会出现 - 以一种 not-particularly-helpful 的方式出现。

现在,我创建了一个 GitHub 问题 here 看看我们是否可以对此进行改进。

更新2020-09-01

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

安装 SQLAlchemy

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