【发布时间】:2021-01-21 15:26:14
【问题描述】:
我在通过 SQLAlchemy 连接访问 Oracle 数据库中的表时遇到问题。具体来说,我正在使用 Kedro catalog.load('table_name') 并收到错误消息 Table table_name not found。所以我决定使用这个答案中列出的方法来测试我的连接:How to verify SqlAlchemy engine object。
from sqlalchemy import create_engine
engine = create_engine('oracle+cx_oracle://USER:PASSWORD@HOST:PORT/?service_name=SERVICE_NAME')
engine.connect()
错误:InvalidRequestError: could not retrieve isolation level
我已尝试按照documentation 中的说明明确添加隔离级别,如下所示:
engine = create_engine('oracle+cx_oracle://USER:PASSWORD@HOST:PORT/?service_name=SERVICE_NAME', execution_options={'isolation_level': 'AUTOCOMMIT'})
还有这个:
engine.connect().execution_options(isolation_level='AUTOCOMMIT')
还有这个:
connection = engine.connect()
connection = connection.execution_options(
isolation_level="AUTOCOMMIT"
)
但在所有情况下我都会遇到相同的错误。
【问题讨论】:
-
确保您拥有最新的 SQL Alchemy。它最近在隔离级别和 Oracle 方面发生了一些变化。
-
嘿,您看到的错误可能仅发生在 SQLAlchemy 1.3.21 中的 connect() 上。在 1.3.22 中,上面的错误是在内部捕获的,而不是在 connect() 时引发的;只有在显式调用 get_isolation_level() 方法时才能看到它。如果您在 1.3.22 或更高版本中看到此错误,请最好将完整的堆栈跟踪发布到 issue tracker
-
感谢@zzzeek 更新 SQLAlchemy 解决了我的问题。
标签: python oracle sqlalchemy kedro