SQLAlchemy MetaData.reflect没有在Oracle db中查找表

时间:2012-09-20 15:12:15

标签: oracle reflection sqlalchemy metadata

我正在尝试将现有的Oracle架构反向工程为一些声明性的SQLAlchemy模型。我的问题是当我使用MetaData.reflect时,它在我的模式中找不到表,只是全局临时表。但是,我仍然可以查询其他表格。

我正在使用SQLAlchemy 0.7.8,CentOS 6.2 x86_64,python 2.6,cx_Oracle 5.1.2和Oracle 11.2.0.2 Express Edition。以下是我正在谈论的内容的快速示例:

>>> import sqlalchemy
>>> engine = sqlalchemy.create_engine('oracle+cx_oracle://user:pass@localhost/xe')
>>> md = sqlalchemy.MetaData(bind=engine)
>>> md.reflect()
>>> md.tables
immutabledict({u'my_gtt': Table(u'my_gtt', MetaData(bind=Engine(oracle+cx_oracle://user:pass@localhost/xe)), Column(u'id', NUMBER(precision=15, scale=0, asdecimal=False), table=<my_gtt>), Column(u'parent_id', NUMBER(precision=15, scale=0, asdecimal=False), table=<my_gtt>), Column(u'query_id', NUMBER(precision=15, scale=0, asdecimal=False), table=<my_gtt>), schema=None)})
>>> len(engine.execute('select * from my_regular_table').fetchall())
4

1 个答案:

答案 0 :(得分:1)

感谢@zzzeek的一些快速帮助,我发现(通过echo='debug'使用create_engine参数)我的问题是由旧用户拥有的表引起的,即使当前用户可以从默认架构访问它们,而无需任何明确的同义词。