我们有一些表不属于我们的用户,但是用户已通过同义词授予访问权限。
我们可以使用sqlalchemy.Table
和oracle_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)
答案 0 :(得分:0)
MetaData.reflect()的源代码解释了该行为。 元数据为engine.all_tables()返回的每个表实例化一个sqlalchemy.Table()。如果不包含“ schema”参数,则将其转换为dialet.get_table_names()调用,该调用返回用户拥有的表。 这意味着MetaData.reflect()将无法从oracle_resolve_synonyms的使用中受益,而oracle_resolve_synonyms只会传递给sqlalchemy.Table()。