You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy AsyncSession执行查询报错,FastAPI异步数据库操作求助

解决SQLAlchemy异步会话调用报错:'async_generator' object has no attribute 'execute'

你遇到的错误核心原因是:get_async_session()是一个异步生成器函数(用yield定义),直接调用它返回的是异步生成器对象,而非实际的AsyncSession实例,所以无法调用execute方法。

修复方案一:通过async for从生成器中获取会话

修改check_db_connect函数,用async for迭代异步生成器来拿到会话实例:

async def check_db_connect():
    async for session in get_async_session():
        try:
            await session.execute(text("SELECT 1"))
            print("-- Database connection successful! --")
            await engine.dispose()
        except Exception as e:
            print(f"Database connection failed: {e}")

修复方案二:直接使用会话工厂创建会话

get_async_session主要是给FastAPI的依赖注入设计的(比如路由里用Depends(get_async_session)),在启动检查这种场景下,可以直接用async_session_maker创建会话,更简洁:

async def check_db_connect():
    async with async_session_maker() as session:
        try:
            await session.execute(text("SELECT 1"))
            print("-- Database connection successful! --")
            await engine.dispose()
        except Exception as e:
            print(f"Database connection failed: {e}")

补充说明:FastAPI依赖中正确使用生成器

你的get_async_session作为依赖函数是完全正确的,在路由中使用Depends时,FastAPI会自动处理异步生成器,提取出AsyncSession实例:

from fastapi import Depends

@app.get("/items")
async def get_items(session: AsyncSession = Depends(get_async_session)):
    result = await session.execute(text("SELECT * FROM items"))
    return result.scalars().all()

内容的提问来源于stack exchange,提问作者ievgen kviatkivskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:24:54