【问题标题】:Exception closing connection using sqlalchemy with asyncio and postgresql使用带有 asyncio 和 postgresql 的 sqlalchemy 的异常关闭连接
【发布时间】:2022-10-19 17:32:59
【问题描述】:

我有一个使用 Python 3.7.10 的 API 服务器。我正在使用带有 sqlalchemy、asyncio、psycopg2-binary、asyncpg 和 postgresql 的 FastAPI 框架。我正在使用 aws elasticbeanstalk 部署它。该应用程序似乎工作正常,但每次我的前端调用端点时,似乎连接没有正确关闭。

错误

Jun  1 21:17:33 web: ERROR:sqlalchemy.pool.impl.AsyncAdaptedQueuePool:Exception closing connection <AdaptedConnection <asyncpg.connection.Connection object at 0x7fd8b005cb90>>
Jun  1 21:17:33 web: Traceback (most recent call last):
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/pool/base.py", line 247, in _close_connection
Jun  1 21:17:33 web: self._dialect.do_close(connection)
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/engine/default.py", line 688, in do_close
Jun  1 21:17:33 web: dbapi_connection.close()
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 749, in close
Jun  1 21:17:33 web: self.await_(self._connection.close())
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 68, in await_only
Jun  1 21:17:33 web: return current.driver.switch(awaitable)
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 121, in greenlet_spawn
Jun  1 21:17:33 web: value = await result
Jun  1 21:17:33 web: File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/asyncpg/connection.py", line 1334, in close
Jun  1 21:17:33 web: await self._protocol.close(timeout)
Jun  1 21:17:33 web: File "asyncpg/protocol/protocol.pyx", line 581, in close
Jun  1 21:17:33 web: concurrent.futures._base.CancelledError

这是我对引擎和会话的设置:

from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

from app.model.base import CustomBase
from app.core.config import SQLALCHEMY_DATABASE_URI

engine = create_async_engine(SQLALCHEMY_DATABASE_URI)

SessionLocal = sessionmaker(
    autocommit=False,
    autoflush=False,
    class_=AsyncSession,
    bind=engine,
    expire_on_commit=False,
)

我正在使用 FastAPI 的依赖注入来获取具有以下内容的会话:

async def get_db() -> AsyncSession:
    async with SessionLocal() as session:
        yield session

此错误仅出现在我的部署中,而不是我的本地环境中,并且似乎仅在将 sqlalchemy 与 asyncio 异步使用时出现。谢谢您的帮助!

【问题讨论】:

    标签: python sqlalchemy python-asyncio fastapi asyncpg


    【解决方案1】:

    通常我在使用时遇到类似的问题:

    @app.middleware("http")
    async def add_process_time_header(request: fastapi.Request, call_next):
    

    禁用中间件有帮助。仍在尝试解决这个问题:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2011-06-30
      • 2021-03-17
      相关资源
      最近更新 更多