SQLAlchemy不返回SQL Server数据库中的所有表名

时间:2017-03-13 22:01:43

标签: python sql-server tsql sqlalchemy pyodbc

当我下载此example database, AdventureWorksLT2012_Data时,尝试访问sql炼金术中的table_names,通过

from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://sa:PASSWORD_HERE@localhost:1433/AdventureWorksLT?driver=FreeTDS")
engine.table_names()

我得到['BuildVersion', 'ErrorLog']。但是,这是数据库中缺少的表。

例如,执行此查询会给出预期的表名...

rs = engine.execute("SELECT name FROM sys.Tables")
[row['name'] for row in rs]

我得到了

['BuildVersion', 'Address', 'Customer', 'CustomerAddress', 'Product', 'ProductCategory', 'ProductDescription', 'ProductModel', 'ProductModelProductDescription', 'SalesOrderDetail', 'SalesOrderHeader', 'ErrorLog']

这是一个错误,还是我忽略了什么?如果我创建一个新数据库,以及具有上述相同名称的表,那么engine.table_names()将按预期工作。

1 个答案:

答案 0 :(得分:5)

查看相应的database creation script,您从engine.table_names()获取的两个表是在[dbo]架构中创建的表。其他的是在[SalesLT]架构中创建的。

因此engine.table_names()似乎只列出了调用时默认架构的表格,在这种情况下恰好是[dbo]