【发布时间】:2023-03-07 11:47:01
【问题描述】:
我正在尝试使用 FastAPI、Postgres 和 SQLAlchemy Core 构建异步后端 API 服务。
当我在没有前端的情况下测试我的 API 服务时,它运行良好,但是当前端开始同时多次访问后端时,我开始看到以下错误:
ERROR: Exception in ASGI application
...
sqlalchemy.exc.ResourceClosedError: This Connection is closed
这是我的设置:
- service/utils/db.py
from fastapi import Request
from sqlalchemy.ext.asyncio import create_async_engine
from service.utils.config import DB_DSN
...
def get_async_engine(echo: bool = True, future: bool = Ture):
global ENGINE
if not ENGINE:
ENGINE = create_async_engine(
str(DB_DSN), echo=echo, future=future
)
return ENGINE
async def get_async_conn():
engine = get_async_engine()
async with engine.begine() as conn:
Request.db_conn = conn
yield
- service/api/main.py
from fastapi import Depends, FastAPI
from service.utils.db import get_async_conn
def get_app():
app = FastAPI(
title="app", dependencies=[Depends(get_async_conn)]
)
...
return app
- 端点示例
from fastapi import APIRouter
router = APIRouter(...)
@router.get("")
async def get_items():
query = await Request.db_conn.execute(...) # some SQL query
items = query.fetchall()
关于如何正确管理异步引擎和与 SQLAlchemy Core 的连接有什么建议吗?
【问题讨论】:
标签: python postgresql sqlalchemy fastapi