反映所有非用户拥有但已授予同义词的表

时间:2019-07-09 11:08:06

标签: python oracle sqlalchemy

我们有一些表不属于我们的用户,但是用户已通过同义词授予访问权限。

我们可以使用sqlalchemy.Tableoracle_resolve_synonyms来反映单个表,但是即使文档说该param参数可以将MetaData.reflect()与该方言参数一起使用,也不会返回表。被传递到下游Table反射。

是因为MetaData.reflect()不能枚举用户不拥有的表吗?

还有其他选项可以反映同义词,而不必逐表反映吗?

编辑

以下作品:

mytable = sqlalchemy.Table('mytable',
                           meta,
                           autoload=True,
                           autoload_with=engine,
                           oracle_resolve_synonyms=True)

但不包括以下内容:

meta.reflect(bind=engine, oracle_resolve_synonyms=True)

1 个答案:

答案 0 :(得分:0)

MetaData.reflect()的源代码解释了该行为。 元数据为engine.all_tables()返回的每个表实例化一个sqlalchemy.Table()。如果不包含“ schema”参数,则将其转换为dialet.get_table_names()调用,该调用返回用户拥有的表。 这意味着MetaData.reflect()将无法从oracle_resolve_synonyms的使用中受益,而oracle_resolve_synonyms只会传递给sqlalchemy.Table()。