首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误导致异步in崩溃的SQLAlchemy : asyncpg.InterfaceError -无法执行操作:另一项操作正在进行中

错误导致异步in崩溃的SQLAlchemy : asyncpg.InterfaceError -无法执行操作:另一项操作正在进行中
EN

Stack Overflow用户
提问于 2022-08-25 10:25:50
回答 1查看 766关注 0票数 1

我正在开发一个使用sqlalchemy和异步and来处理postgres数据库的database服务器。对于每个请求,都会创建一个新会话(如文档中所示,通过快速a依赖注入)。我在sqlite+aiosqlite之前就使用了postgres+asyncpg,一切都很完美。在我从sqlite切换到postgres之后,每一个switched请求都会因错误而崩溃:

代码语言:javascript
运行
复制
sqlalchemy.dialects.postgresql.asyncpg.InterfaceError - cannot perform operation: another operation is in progress

我就是这样创建引擎和会话的:

代码语言:javascript
运行
复制
from typing import Generator
import os

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine


user = os.getenv('PG_USER')
password = os.getenv('PG_PASSWORD')
domain = os.getenv('PG_DOMAIN')
db = os.getenv('PG_DATABASE')

# db_async_url = f'sqlite+aiosqlite:///database.sqlite3'
db_async_url = f'postgresql+asyncpg://{user}:{password}@{domain}/{db}'

async_engine = create_async_engine(
    db_async_url, future=True, echo=True
)

create_async_session = sessionmaker(
    async_engine, class_=AsyncSession, expire_on_commit=False
)

async def get_async_session() -> Generator[AsyncSession]:
    async with create_async_session() as session:
        yield session
EN

回答 1

Stack Overflow用户

发布于 2022-08-25 10:25:50

将poolclass=NullPool添加到create_async_engine后,错误消失了,下面是引擎创建的样子:

代码语言:javascript
运行
复制
from sqlalchemy.pool import NullPool

...

async_engine = create_async_engine(
    db_async_url, future=True, echo=True, poolclass=NullPool
)

我花了一天多的时间来解决这个问题。我希望我的答案能为其他开发人员节省很多时间。也许还有其他解决办法,如果是的话,我将很高兴在这里看到它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73485899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档