【发布时间】: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