[英]'async_generator is not a callable object' FastAPI dependency issue app
我正在嘗試創建一個 FastAPI 和異步 sqlalchemy。
get_db 依賴會導致奇怪的TypeError: <async_generator object get_db at 0x7ff6d9d9aa60> is not a callable object
問題。
這是我的代碼:
數據庫.py
from typing import Generator
from .db.session import SessionLocal
async def get_db() -> Generator:
try:
db = SessionLocal()
yield db
finally:
await db.close()
session.py
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from .core.config import settings
engine = create_async_engine(
settings.SQLALCHEMY_DATABASE_URI,
pool_pre_ping=True
)
SessionLocal = AsyncSession(
autocommit=False,
autoflush=False,
bind=engine
)
我幾乎遵循了此處發布的說明: https://6060ff4ffd0e7c1b62baa6c7--fastapi.netlify.app/advanced/sql-databases-sqlalchemy/#more-info
問題是
engine = create_async_engine(
settings.SQLALCHEMY_DATABASE_URI,
pool_pre_ping=True
)
您正在用 promise 填充engine
,但必須完成。 基本上, async
功能允許您使用代碼 go,而某些 I/O 或網絡內容仍處於待處理狀態。
因此,您將引擎作為參數傳遞,盡管連接可能尚未建立。
在將其用作其他函數的參數之前,您應該await
引擎的返回。
這是有關 python 的async
功能的更多信息
我已經弄清楚了,基本上當您將生成器get_db()
作為 FastAPI 端點的依賴項調用時,您基本上只是將其稱為get_db
而不帶括號。
例如:
from typing import List, Any
from fastapi import APIRouter, HTTPException, Depends, status
from sqlalchemy.ext.asyncio import AsyncSession
from . import models, crud, schemas
from .deps.db import get_db
router = APIRouter()
@router.post('/',
response_model=schemas.StaffAccount,
status_code=status.HTTP_201_CREATED)
async def create_staff_account(
db: AsyncSession = Depends(get_db),
staff_acct: schemas.StaffAccountCreate = Depends(schemas.StaffAccountCreate)
) -> Any:
q = await crud.staff.create(db=db, obj_in=staff_acct)
if not q:
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail='An error occurred while processing your request')
return q
這是一個很小的細節,可能會妨礙一些初學者(比如我)。 因此,請更仔細地查看您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.