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

Getting raw psycopg2 cursor object from a SQLAlchemy session object

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

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

maiden_engine = create_engine(connection_url)
session = sessionmaker(maiden_engine)
connector = session()

现在对于某个用例,我想从这个connector对象中得到pyscopg2cursor对象,有没有办法可以实现这种转换?

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

import psycopg2
conn = psycopg2.connect(host, port, database, user, password, sslmode)
cursor = conn.cursor()

Note that this conversaion HAS to be made from connector object in the last line of first code snippet, I can not use maiden_engine or anything else.

在您的例子中,connector 变量是一个 <class 'sqlalchemy.orm.session.Session'> 对象。 Session 对象具有 .bind 属性,该属性 returns <class 'sqlalchemy.engine.base.Engine'> 与会话关联。

Engine 对象有一个 .raw_connection() 方法,该方法 returns (代理)原始 DBAPI 连接,并在该 returns 上调用 .cursor()原始 DBAPI Cursor 对象。因此,

crsr = connector.bind.raw_connection().cursor()