Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Oracle表的SqlAlchemy反射未拥有_Python_Sql_Oracle_Sqlalchemy - Fatal编程技术网

Python Oracle表的SqlAlchemy反射未拥有

Python Oracle表的SqlAlchemy反射未拥有,python,sql,oracle,sqlalchemy,Python,Sql,Oracle,Sqlalchemy,我正在使用SQLAlchemy对Oracle数据库运行SQL查询。我拥有对数据库的读取权限,但我拥有的用户并不拥有我正在使用的任何表 数据库定期更新,因此我希望使用反射,而不是显式地列出元数据。我发现,这描述了一个类似于我所遇到的问题。但是,我没有办法更改表的所有权,也没有办法以任何方式修改数据库。我只有阅读权限 如果我没有Oracle表的所有权,是否有办法在SQLAlchemy中反映这些表 (编辑) 示例代码: engine = create_engine('ORACLE CONNECTION

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

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

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

(编辑)

示例代码:

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登录时。

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

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

这样,您将反映属于“userA”的所有可读表。我不知道为什么您可以使用
引擎查询学生。但是执行

如果您对这些表有读取权限,即使您没有这些表,反射也应该可以正常工作。我经常和这样的桌子一起工作。具体问题是什么?如果您试图写入一个只有读取权限的数据库,SQLA将无法帮助您。我已经用特定代码编辑了我的问题,以显示我试图完成的任务。我是sqlalchemy的新手,所以完全有可能我做得不对。谢谢你的帮助。这就成功了!将schema='userA'添加到total reflect和特定于表的reflect中,效果与预期一样。再次感谢你的帮助。