【问题标题】:SQLAlchemy table reflection with Sybase使用 Sybase 的 SQLAlchemy 表反射
【发布时间】: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


    【解决方案1】:

    我通过在MetaData 对象上设置schema 参数解决了这个问题。我必须将其设置为dbo。您也可以在reflect 函数中指定此项。

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2020-09-10
      • 2013-02-24
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多