首页 > 解决方案 > 如何使用 create_engine() 在 SQLAlchemy 和 cx_Oracle 中设置模块名称?

问题描述

在 SQLAlchemy 中,我创建了一个引擎:

engine = create_engine(url="oracle+cx_oracle://user:xxxx@tns")

在 cx_Oracle 中,我将创建一个连接:

conn = cx_Oracle.connect(user="user", password="xxxx", dsn="tns")

然后,我可以使用Connection.module属性设置模块,该属性在查看 v$session 表时会适当地标记。

conn.module = "MyModule"

有没有办法将 Oracle 会话模块名称设置sqlalchemy.engine.Engine为创建后的名称create_engine

标签: pythonsqlalchemycx-oracle

解决方案


我最终使用了对我很有效的DialectEvents.do_connect() 钩子

import cx_Oracle
from sqlalchemy import create_engine, event


engine = create_engine(url="oracle+cx_oracle://user:xxxx@tns")
@event.listens_for(engine, "do_connect")
def receive_do_connect(dialect, conn_rec, cargs, cparams):
    """listen for the 'do_connect' event"""
    connection = cx_Oracle.connect(*cargs, **cparams)
    connection.module = "MyModule"
    return connection

推荐阅读