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的虚拟环境中运行代码的,不确定这个错误是和硬件有关,还是官方教程的文档没跟上包版本更新,求各位帮忙解答!
相关代码与环境
代码文件
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)
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)
.env
DATABASE_URL="postgresql+asyncpg://username:password@server_domain/fastapi?sslmode"
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硬件完全无关,核心是异步数据库驱动缺失+配置小问题,按以下步骤修复即可:
安装异步PostgreSQL驱动
asyncpg
你使用的是AsyncEngine异步引擎,必须搭配异步的PostgreSQL驱动才能正常工作,但你的依赖里没有安装asyncpg,在虚拟环境中执行以下命令安装:pip install asyncpg修正
.env中的DATABASE_URL参数
Neon DB强制要求SSL连接,你的DATABASE_URL里sslmode参数没有赋值,需要补充完整:DATABASE_URL="postgresql+asyncpg://username:password@server_domain/fastapi?sslmode=require"清理冲突的同步驱动(可选)
如果你的虚拟环境中存在同步的PostgreSQL驱动(比如psycopg2或psycopg2-binary),可能会干扰异步驱动的加载,建议卸载:pip uninstall psycopg2 psycopg2-binary -y
完成以上步骤后,重新运行你的代码,应该就能成功连接Neon DB并执行查询了!
备注:内容来源于stack exchange,提问作者psudo
相关产品推荐
相关产品推荐

