python - 如何使用 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
?
解决方案
我最终使用了对我很有效的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
推荐阅读
- delphi - 更改 Sysem.Variants.VarToWideStr 的区域设置格式
- olap - 如何提高 Clickhouse Kafka 消费者的性能
- c++ - 同时保存来自两个不同应用程序的两个数据文件
- laravel - 创建新的 laravel 项目时如何在控制台中修复此错误?
- java - 为什么这不是线程安全的?
- python - python gRPC 相当于 golang 的 PerRPCCredentials
- php - 在laravel中将数据从视图传递到视图
- linux - 选择没有id的属性
- arrays - Swift:将二维数组转换为自定义对象数组
- selenium-webdriver - 我们可以将 WinAppDriver 与 Selenium WebDriver(自动化 Siebel/Silverlight 应用程序)连接起来吗?