python - 异步 SQLAlchemy:sqlalchemy.exc.InvalidRequestError:此会话处于“准备”状态;此事务中不能发出更多 SQL
问题描述
我目前正在使用带有异步方法并在asyncio
事件循环中运行的类的异步 SQLAlchemy。
from asyncio.tasks import current_task
from sqlalchemy import update as select
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.asyncio import AsyncSession
engine = create_async_engine(url)
async_session_factory = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)
AsyncSession = scoped_session(async_session_factory, scopefunc=current_task)
class Animals:
def __init__(self):
self.connection = None
async def connect(self):
self.connection = AsyncSession()
async def add():
query = select(Animals.nicknames)
self.connection.add(query)
self.connection.commit()
async def get():
query = select(Animals.nicknames)
rows = await self.connection.execute(query)
for row in rows:
print(row[0])
我的课需要有
self.connection = AsyncSession()
因为使用此类的应用程序将调用Animals.connection.close()
关闭。
偶尔会出现错误信息:
sqlalchemy.exc.InvalidRequestError:此会话处于“准备”状态;在此事务中不能发出更多 SQL。
并且
sqlalchemy.dialects.postgresql.asyncpg.AsyncAdapt_asyncpg_dbapi.InterfaceError:<class 'asyncpg.exceptions._base.InterfaceError'>:无法执行操作:另一个操作正在进行中
是否可以在不修改使用此类的外部应用程序的情况下避免此错误?
解决方案
推荐阅读
- java - Spring Boot 伪装异常
- java - 无法使用 Java Spring 连接到 MySQL
- delphi - 如何跟踪我的 idHTTPServer 上长时间运行的操作?
- python - 尝试从我的计算机导入 .wav 文件以在我的 Pythonista (3) 脚本中使用
- angular - Angular Universal (SSR) 错误:无法在视图目录中查找视图“索引”
- coq - “……的非严格正面发生”
- python - Numpy:如何为每一列设置列[索引:] =值,用于不同索引的数组?
- azure - 如何在带有会话 ID 的 Azure 服务总线队列中发送和接收消息?
- python - Pyqt5 - QComboBox 在填充元素时非常慢
- python - 导出数据到excel,只得到最后一行