【发布时间】:2019-12-24 19:56:13
【问题描述】:
我正在尝试为 Oracle 11g 数据库创建一个只读用户,SQLAlchemy 将使用该用户来查询数据库。 我在 SQLAlchemy 中使用现有的 DBA 用户并且没有任何问题,但现在使用新用户时,我无法反映数据库表。
Could not reflect: requested table(s) not available in Engine
请注意,我可以选择表,但不能反映它们。 我想知道我需要向新用户授予什么样的权限才能使其能够通过 SQLALchemy 进行反映。
我尝试将所有角色从现有 DBA 复制到新用户,但仍然出现相同的错误
我什至尝试了一些以前没有使用过的高级角色(我计划稍后再次正确删除和添加用户。 DBACONSULTA 是我正在创建的新用户。
GRANT DBA TO DBACONSULTA
GRANT EXECUTE ANY EVALUATION CONTEXT TO DBACONSULTA
GRANT ANALYZE ANY TO DBACONSULTA
GRANT SELECT ANY TABLE TO DBACONSULTA
GRANT EXECUTE ANY PROGRAM TO DBACONSULTA
对于 Python,我使用以下代码:
engine=create_engine('oracle+cx_oracle://...')
metadata = MetaData()
metadata.reflect(engine, only=['tablename'])
得到错误:
Could not reflect: requested table(s) not available in Engine
我希望能够在不使用 SQLAlchemy 的声明形式的情况下反映表
提前致谢。
【问题讨论】:
-
默认情况下,Oracle 会以大写形式存储对象名称(列、表等)。你试过
'TABLENAME'而不是'tablename'吗? -
是的,我做到了。我也相信 SQLAlchemy 自己会大写。
标签: oracle oracle11g sqlalchemy