Sqlalchemy - 如何在Oracle数据库中指定所有者

时间:2018-04-16 16:45:26

标签: python oracle sqlalchemy

我正在尝试反映我的数据库中的现有表:

engine = sqlalchemy.create_engine("oracle://username:password@id", ...)
meta = sqlalchemy.MetaData()
myTable = sqlalchemy.Table("myTable", meta, autoload=True, autoload_with=engine,
                           oracle_resolve_synonyms=True)

这给了我一个错误:

  

AssertionError:架构可以看到多个表,您必须指定所有者

如何在sqlalchemy中指定所有者? The documentation未提及有关指定所有者的任何内容。该表实际上是一个同义词,所以我必须使用oracle_resolve_synonyms。我可以在技术上执行原始查询,但这不是我想要做的事情。

2 个答案:

答案 0 :(得分:1)

阅读完源代码后,我发现可以通过the schema keyword argument指定所有者:

myTable = sqlalchemy.Table("myTable", meta, autoload=True, autoload_with=engine,
                           oracle_resolve_synonyms=True, schema="ownerName")

答案 1 :(得分:1)

这是关于MetaData的文档:http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData

您可能希望使用架构所有者实例化MetaData:

meta = sqlalchemy.MetaData(engine, schema='ora_schema_owner')