【问题标题】:SQLAlchemy does not return all table names in SQL Server databaseSQLAlchemy 不返回 SQL Server 数据库中的所有表名
【发布时间】:2017-08-04 02:15:40
【问题描述】:

当我下载这个example database, AdventureWorksLT2012_Data,并尝试访问 sql alchemy 中的 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() 将按预期工作。

【问题讨论】:

  • @Parfait,数据库没有损坏,问题可以通过从链接下载来重现。我没有意识到engine.table_names 可能只查看数据库中的特定模式。

标签: python sql-server tsql sqlalchemy pyodbc


【解决方案1】:

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

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

【讨论】:

  • 啊,就是这样!感谢您指向数据库创建脚本——它真的很有用。万一它对任何人都有用,我最终使用 engine.table_names(schema = "SalesLT") 列出了 SalesLT 模式中的表。
猜你喜欢
  • 2018-10-28
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2017-03-09
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多