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
我无法连接到使用 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 正式发布之前利用此功能,您可以通过
安装 SQLAlchemypip 安装git+https://github.com/sqlalchemy/sqlalchemy.git