从 SQLAlchemy 会话对象获取原始 psycopg2 游标对象

saa*_*adi 2 postgresql sqlalchemy psycopg2 python-3.x

我正在使用它创建一个会话对象

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

maiden_engine = create_engine(connection_url)
session = sessionmaker(maiden_engine)
connector = session()
Run Code Online (Sandbox Code Playgroud)

现在对于某个用例,我想pyscopg2 cursor从该connector对象获取对象,有没有办法可以实现这种转换?

这就是通常创建游标对象的方式

import psycopg2
conn = psycopg2.connect(host, port, database, user, password, sslmode)
cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

请注意,此对话必须由第一个代码片段最后一行中的对象进行connector,我不能使用maiden_engine或其他任何东西。

Gor*_*son 5

在你的情况下,connector变量是一个<class 'sqlalchemy.orm.session.Session'>对象。Session对象有一个.bind属性,该属性返回<class 'sqlalchemy.engine.base.Engine'>与会话关联的 。

Engine对象有一个.raw_connection()返回原始 DBAPI 连接(代理)的方法,并调用.cursor()该方法返回原始 DBAPICursor对象。因此,

crsr = connector.bind.raw_connection().cursor()
Run Code Online (Sandbox Code Playgroud)