SQLAlchemy的MetaData.reflect Oracle数据库中找不到表(SQLAlch

2019-09-22 16:44发布

我试图扭转工程师现有的Oracle架构到一些声明SQLAlchemy的车型。 我的问题是,当我使用MetaData.reflect ,它没有找到我的模式中的表,只是一个全局临时表。 不过,我还是就可以查询其他表。

我使用SQLAlchemy的0.7.8,CentOS的6.2 x86_64的,蟒蛇2.6,cx_Oracle 5.1.2和Oracle 11.2.0.2 Express版本。 下面是我在谈论的快速示例:

>>> 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

Answer 1:

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



文章来源: SQLAlchemy MetaData.reflect not finding tables in Oracle db