Python 使用Sybase的SQLAlchemy表反射

Python 使用Sybase的SQLAlchemy表反射,python,sqlalchemy,sybase,Python,Sqlalchemy,Sybase,当我尝试在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的内容,但这不会产生任何结果 我

当我尝试在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的内容,但这不会产生任何结果

我尝试创建一个单独的
对象,并使用
autoload=True
选项,但这会产生一个TableDoesNotExist错误

accounts = Table('Accounts', metadata, autoload=True, autoload_with=engine)
我查看了这个查询,似乎@schema_名称正在成为我的用户名,来自“sysobjects”的表中似乎没有一个将“name”属性设置为我的用户名。它们都被设置为“dbo”,这意味着数据库所有者,因此查询不会返回任何内容,也不会反映任何内容。有没有办法强迫SQLAlchemy使用不同的名称作为schema_名称


我发现了两个关于使用Sybase方言的表反射的问题。这两个问题都是6年前提出的,似乎表明Sybase的表反射不受支持。然而,SQLAlchemy似乎试图像上面那样运行真正的sybase反射查询,所以我认为现在不是这样

我通过在
元数据
对象上设置
模式
参数解决了这个问题。我必须将其设置为
dbo
。您也可以在
reflect
功能中指定这一点