gpt4 book ai didi

python - Oracle 表未拥有的 SqlAlchemy 反射

转载 作者:太空狗 更新时间:2023-10-29 22:30:21 25 4
gpt4 key购买 nike

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

数据库定期更新,所以我希望使用反射而不是显式列出元数据。我找到了 this question ,它描述了一个类似于我所遇到的问题。但是,我没有办法更改表的所有权,也没有以任何方式修改数据库。我只有读取权限。

如果我没有这些表的所有权,是否有办法在 SQLAlchemy 中反射(reflect) Oracle 表?

(编辑)

示例代码:

engine = create_engine('ORACLE CONNECTION STRING')

metadata = MetaData()

students = Table('students', metadata, autoload=True, autoload_with=engine)

我收到一个异常 sqlalchemy.exc.NoSuchTableError: students

但是,当我运行以下命令时:

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

for r in results:
print(r)

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

因此,我没有尝试反射(reflect)单个表格,而是尝试反射(reflect)所有表格:

metadata.reflect(bind=engine)

print(metadata.tables)

输出是immutabledict({})

所以本质上它什么都不是。所有这些表都归用户 A 所有,而我正在使用用户 B 的只读权限登录。

最佳答案

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

metadata.reflect(bind=engine, schema='userA')

这样,您将反射(reflect)属于“userA”的所有可读表。不过,我不确定您为什么能够使用 engine.execute 查询学生。

关于python - Oracle 表未拥有的 SqlAlchemy 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25450754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com