SQLAlchemy table 与 Sybase 的反射
SQLAlchemy table reflection with Sybase
当我试图在我的 Sybase 数据库中反映所有 table 时
metadata = MetaData()
metadata.reflect(bind=engine)
SQLAlchemy 运行s 以下查询:
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" 的 table 中的 none 似乎有"name" 属性设置为我的用户名。它们都设置为 "dbo",这意味着数据库所有者,因此查询 returns 什么都没有,也没有任何反映。有没有办法强制 SQLAlchemy 使用与 schema_name 不同的东西?
我发现了两个关于 table 使用 Sybase 方言进行反射的问题。这两个问题都是 6 年前提出的,似乎表明 table 不支持 Sybase 的反射。但是,似乎 SQLAlchemy 试图 运行 一个真正的 sybase 反射查询,所以我认为现在不是这种情况。
我通过在 MetaData
对象上设置 schema
参数解决了这个问题。我不得不将它设置为 dbo
。您也可以在 reflect
函数中指定它。
当我试图在我的 Sybase 数据库中反映所有 table 时
metadata = MetaData()
metadata.reflect(bind=engine)
SQLAlchemy 运行s 以下查询:
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" 的 table 中的 none 似乎有"name" 属性设置为我的用户名。它们都设置为 "dbo",这意味着数据库所有者,因此查询 returns 什么都没有,也没有任何反映。有没有办法强制 SQLAlchemy 使用与 schema_name 不同的东西?
我发现了两个关于 table 使用 Sybase 方言进行反射的问题。这两个问题都是 6 年前提出的,似乎表明 table 不支持 Sybase 的反射。但是,似乎 SQLAlchemy 试图 运行 一个真正的 sybase 反射查询,所以我认为现在不是这种情况。
我通过在 MetaData
对象上设置 schema
参数解决了这个问题。我不得不将它设置为 dbo
。您也可以在 reflect
函数中指定它。