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

FastAPI+SQLModel连接Neon DB时出现异步驱动不兼容错误求助

FastAPI+SQLModel连接Neon DB时出现异步驱动不兼容错误求助

问题描述

我正在跟着FastAPI官方教程学习,目前学到第5章(使用SQLModel操作数据库),按照文档要求使用Neon DB作为数据库,但运行代码时触发了InvalidRequestError,错误信息如下:

InvalidRequestError: The asyncio extension requires an async driver to be used. The loaded 'psycopg2' is not async.

我是在M1 Mac的虚拟环境中运行代码的,不确定这个错误是和硬件有关,还是官方教程的文档没跟上包版本更新,求各位帮忙解答!

相关代码与环境

代码文件

  1. src/__init__.py
from sqlmodel import create_engine, text
from sqlalchemy.ext.asyncio import AsyncEngine
from src.config import Config

engine = AsyncEngine(create_engine(
    url=Config.DATABASE_URL,
    echo=True
))


async def initdb():
    """create a connection to our db"""

    async with engine.begin() as conn:
        statement = text("select 'Hello World'")

        result = await conn.execute(statement)

        print(result)
  1. src/db/main.py
from sqlmodel import create_engine, text
from sqlalchemy.ext.asyncio import AsyncEngine
from src.config import Config

engine = AsyncEngine(create_engine(
    url=Config.DATABASE_URL,
    echo=True
))


async def initdb():
    """create a connection to our db"""

    async with engine.begin() as conn:
        statement = text("select 'Hello World'")

        result = await conn.execute(statement)

        print(result)
  1. .env
DATABASE_URL="postgresql+asyncpg://username:password@server_domain/fastapi?sslmode"
  1. src/config.py
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
    DATABASE_URL: str 

    model_config = SettingsConfigDict(
        env_file=".env", 
        extra="ignore"
    )

# add this line    
Config = Settings()

依赖版本(requirements.txt)

SQLAlchemy==2.0.36
sqlmodel==0.0.22

解决方案

这个问题和你的M1硬件完全无关,核心是异步数据库驱动缺失+配置小问题,按以下步骤修复即可:

  1. 安装异步PostgreSQL驱动asyncpg
    你使用的是AsyncEngine异步引擎,必须搭配异步的PostgreSQL驱动才能正常工作,但你的依赖里没有安装asyncpg,在虚拟环境中执行以下命令安装:

    pip install asyncpg
    
  2. 修正.env中的DATABASE_URL参数
    Neon DB强制要求SSL连接,你的DATABASE_URL里sslmode参数没有赋值,需要补充完整:

    DATABASE_URL="postgresql+asyncpg://username:password@server_domain/fastapi?sslmode=require"
    
  3. 清理冲突的同步驱动(可选)
    如果你的虚拟环境中存在同步的PostgreSQL驱动(比如psycopg2或psycopg2-binary),可能会干扰异步驱动的加载,建议卸载:

    pip uninstall psycopg2 psycopg2-binary -y
    

完成以上步骤后,重新运行你的代码,应该就能成功连接Neon DB并执行查询了!

备注:内容来源于stack exchange,提问作者psudo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:08:15