SqlAlchemy反映Oracle表没有

use*_*245 6 python sql oracle sqlalchemy

我正在使用SQLAlchemy对Oracle数据库运行SQL查询.我有读取数据库的权限,但我拥有的用户并不拥有我正在使用的任何表.

数据库定期更新,因此我希望使用反射,而不是明确列出MetaData.我发现了这个问题,它描述了一个类似于我所拥有的问题.但是,我没有办法改变表的所有权,也没有办法以任何方式修改数据库.我只是有读取权限.

如果我没有这些表的所有权,有没有办法在SQLAlchemy中反映Oracle表?

(编辑)

示例代码:

engine = create_engine('ORACLE CONNECTION STRING')

metadata = MetaData()

students = Table('students', metadata, autoload=True, autoload_with=engine)
Run Code Online (Sandbox Code Playgroud)

我收到一个例外 sqlalchemy.exc.NoSuchTableError: students

但是,当我运行以下内容时:

results = engine.execute('SELECT * FROM students')

for r in results:
    print(r)
Run Code Online (Sandbox Code Playgroud)

我从表中收到了我期望的输出,这是每行所有字段的元组.

因此,我试图反映所有这些,而不是试图反映一个表:

metadata.reflect(bind=engine)

print(metadata.tables)
Run Code Online (Sandbox Code Playgroud)

输出是immutabledict({}).

所以基本上没什么.所有这些表都由用户A拥有,因为我以只读用户B登录.

jkm*_*acc 7

如果您指定schema要定位的(帐户),您可能会更好地反映其他人的表:

metadata.reflect(bind=engine, schema='userA')
Run Code Online (Sandbox Code Playgroud)

这样,您将反映属于"userA"的所有可读表.不过,我不确定为什么你能查询学生engine.execute.