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

mac*_*how 4 python t-sql sql-server sqlalchemy pyodbc

当我下载这个示例数据库,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()
Run Code Online (Sandbox Code Playgroud)

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

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

rs = engine.execute("SELECT name FROM sys.Tables")
[row['name'] for row in rs]
Run Code Online (Sandbox Code Playgroud)

我明白了

['BuildVersion', 'Address', 'Customer', 'CustomerAddress', 'Product', 'ProductCategory', 'ProductDescription', 'ProductModel', 'ProductModelProductDescription', 'SalesOrderDetail', 'SalesOrderHeader', 'ErrorLog']
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*son 6

查看相应的数据库创建脚本,您获得的两个表engine.table_names()是在[dbo]模式中创建的表.其他是在[SalesLT]架构中创建的.

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

  • 啊,就是这样!感谢您指向数据库创建脚本-这真的很有用。如果对任何人有用,我最终使用`engine.table_names(schema =“ SalesLT”)`从SalesLT架构中列出表。 (2认同)