gpt4 book ai didi

SQLAlchemy 1.4 异步事件监听器

转载 作者:行者123 更新时间:2023-12-05 03:41:09 27 4
gpt4 key购买 nike

尝试使用事件监听器(https://docs.sqlalchemy.org/en/14/core/events.html#sqlalchemy.events.ConnectionEvents) 在异步 sqlalchemy 引擎上并收到此错误:{NotImplementedError}此时未实现异步事件。将同步监听器应用于 AsyncEngine.sync_engine 或 AsyncConnection.sync_connection 属性。

如果我理解正确,我不能在异步引擎上使用事件,如果我想要事件支持,我必须切换到同步引擎?

engine: Engine = create_async_engine(
URL, echo=True, future=True
)

async_session = sessionmaker(
engine, class_=AsyncSession, expire_on_commit=False, future=True
)


event.listens_for(engine, "do_connect")(do_connect_listener)
event.listens_for(engine, "engine_connect")(engine_connect_listener)

最佳答案

从 github 上的 SQLAlchemy 讨论部分得到了答案。所有功劳都归功于 OP(https://github.com/sqlalchemy/sqlalchemy/discussions/6594#discussioncomment-836437):

“你好,

根据异常的建议,您可以在应用事件时使用 sync_engine/sync_connection。这是一个例子:"



import asyncio
from sqlalchemy import event
from sqlalchemy.ext.asyncio import create_async_engine

engine = create_async_engine("sqlite+aiosqlite:///:memory:")

@event.listens_for(engine.sync_engine, "do_connect")
def do_connect(dialect, conn_rec, cargs, cparams):
print("some-function")

@event.listens_for(engine.sync_engine, "engine_connect")
def engine_connect(conn, branch):
print("engine_connect", conn.exec_driver_sql("select 1").scalar())

async def go():
async with engine.connect() as conn:
res = await conn.exec_driver_sql("select 2")
print("go", res.scalar())

asyncio.run(go())

关于SQLAlchemy 1.4 异步事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67874092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com