【发布时间】:2018-05-10 02:07:04
【问题描述】:
当我尝试反映 Sybase DB 中的所有表时
metadata = MetaData()
metadata.reflect(bind=engine)
SQLAlchemy 运行以下查询:
SELECT o.name AS name
FROM sysobjects o JOIN sysusers u ON o.uid = u.uid
WHERE u.name = @schema_name
AND o.type = 'U'
然后我尝试打印 metadata.tables 的内容,但没有任何结果。
我尝试创建一个单独的 Table 对象并使用 autoload=True 选项,但这会产生 TableDoesNotExist 错误。
accounts = Table('Accounts', metadata, autoload=True, autoload_with=engine)
我查看了这个查询,似乎@schema_name 正在成为我的用户名,并且来自“sysobjects”的所有表似乎都没有将“name”属性设置为我的用户名。它们都设置为“dbo”,这意味着数据库所有者,因此查询不会返回任何内容,也不会反映任何内容。有没有办法强制 SQLAlchemy 使用不同的东西作为 schema_name?
我发现了两个关于使用 Sybase 方言进行表反射的问题。两者都在 6 年前被问及,似乎表明 Sybase 的表反射不受支持。但是,SQLAlchemy 似乎尝试像上面那样运行真正的 sybase 反射查询,所以我认为现在情况并非如此。
【问题讨论】:
标签: python sqlalchemy sybase