【发布时间】:2014-10-16 12:40:53
【问题描述】:
我正在使用 SQLAlchemy 对 Oracle 数据库运行 SQL 查询。我拥有数据库的读取权限,但我拥有的用户不拥有我正在使用的任何表。
数据库会定期更新,因此我希望使用反射,而不是明确列出元数据。我找到了this question,它描述了一个类似于我遇到的问题。但是,我无法更改表的所有权,也无法以任何方式修改数据库。我只有读取权限。
如果我没有这些表的所有权,有没有办法在 SQLAlchemy 中反映 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)
我从表中收到了我期望的输出,它是每行所有字段的元组。
因此,我没有尝试反映单个表,而是尝试反映所有表:
metadata.reflect(bind=engine)
print(metadata.tables)
输出为immutabledict({})。
所以本质上它什么都不是。所有这些表都归用户 A 所有,而我以用户 B 的只读身份登录。
【问题讨论】:
-
如果您对这些表具有读取权限,即使您不拥有它们,反射也应该可以正常工作。我经常使用这样的桌子。具体是什么问题?如果您尝试写入您只有读取权限的数据库,SQLA 将无法帮助您。
-
我已经用特定代码编辑了我的问题,以显示我想要完成的工作。我是 sqlalchemy 的新手,所以完全有可能我做的不对。感谢您的帮助。
标签: python sql oracle sqlalchemy