You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为create_engine()创建的SQLAlchemy实例设置Oracle会话module名称

解决方案

可以通过SQLAlchemy的连接事件监听机制实现,这是官方推荐的对原生DBAPI连接做自定义配置的方式,具体实现步骤如下:

  • 第一步:导入所需依赖
from sqlalchemy import create_engine, event
  • 第二步:创建引擎并注册连接监听事件
engine = create_engine(url="oracle+cx_oracle://user:xxxx@tns")

# 监听连接池创建新连接的事件,每次新连接生成时自动设置module
@event.listens_for(engine, "connect")
def set_oracle_session_module(dbapi_connection, connection_record):
    # 此处的dbapi_connection就是原生的cx_Oracle连接对象
    dbapi_connection.module = "MyModule"
    # 可选:还可以同步设置其他v$session可见属性,比如action、client_info等
    # dbapi_connection.action = "MyAction"
    # dbapi_connection.clientinfo = "MyClientInfo"

可选方案:自定义连接创建函数

如果你需要完全控制连接的创建逻辑,也可以通过creator参数传入自定义的连接生成函数:

import cx_Oracle
from sqlalchemy import create_engine

def custom_cx_oracle_conn():
    conn = cx_Oracle.connect(user="user", password="xxxx", dsn="tns")
    conn.module = "MyModule"
    return conn

# 传入creator参数,引擎会调用该函数获取原生连接
engine = create_engine("oracle+cx_oracle://", creator=custom_cx_oracle_conn)
验证方式

配置完成后,可以通过如下SQL查询当前会话的module属性,验证配置是否生效:

SELECT module FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID')
说明
  • 该配置对所有从该Engine连接池获取的新连接自动生效,无需每次手动调整连接属性
  • 适配SQLAlchemy 1.x和2.x全版本

内容的提问来源于stack exchange,提问作者mxdev88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:15:04