2

我正在尝试将现有的 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
4

1 回答 1

4

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

于 2012-09-21T17:41:36.630 回答