不推荐新项目选用 gino,因其自2021年起停止维护,不兼容python 3.12+ asyncio、sqlalchemy 2.0及fastapi 2025+,存在连接泄漏、事件循环关闭等运行时风险。

GINO 在 2026 年还值得选吗?
不推荐新项目选用 GINO,它已事实停止维护。官方 GitHub 仓库自 2021 年起无任何提交,PyPI 上最新版本 gino==1.0.1 发布于 2020 年;2025 年多个技术报告(如 CSDN《Python异步ORM终极指南》、InfoQ Python 生态年报)均将其列为「历史方案」而非活跃选项。
它的核心问题不是功能差,而是与现代 Python 异步生态脱节:
-
asyncio运行时在 Python 3.12+ 中重构了任务调度机制,而 GINO 依赖的旧版aiopg/aiomysql绑定层未适配,偶发连接泄漏或RuntimeError: Event loop is closed - 不兼容 SQLAlchemy 2.0 的表达式系统,无法复用
select()/update()等新语法,模型定义和查询逻辑割裂 - 与 FastAPI 2025+ 的依赖注入深度集成能力弱,
Depends(get_db)需手动包装连接池,容易漏掉await db.pop_bind().close()
替代方案怎么选?重点看这三点
如果你正从 GINO 迁移,或刚开始选型,别纠结「哪个最像 SQLAlchemy」,先盯住三个实际卡点:
-
是否必须用 PostgreSQL 的 LISTEN/NOTIFY? → 选
Tortoise ORM:原生支持异步监听,await connection.add_listener("channel", callback)直接可用,GINO 虽也支持但需手写底层pg_notify协程封装 -
是否已有大量 SQLAlchemy Core 查询? → 选
SQLModel+asyncpg手动封装:SQLModel 兼容 SQLAlchemy 2.0 模型定义,用asyncpg.connect()+fetch_all()替代 ORM 层,避免重写复杂查询 -
是否需要强类型 + Pydantic v2 集成? → 选
piccolo:自带pydantic_model()方法,字段类型自动映射,比 GINO 的__table_args__声明更直观,且 2025 年已支持 asyncpg 和 sqlite
GINO 代码还能跑,但这些坑会突然炸
现有项目若暂不能迁移,至少避开这几个高频崩溃点:
立即学习“Python免费学习笔记(深入)”;
- 不要在
async def外调用await Model.get()—— GINO 的绑定(db.bind)是协程局部的,主线程里 await 会报RuntimeError: no running event loop - 事务嵌套必须显式控制:GINO 不支持
async with db.transaction()嵌套,第二层会抛TransactionNotStartedError,得改用await db.status("BEGIN")手动管理 - 连接池超时默认是 60 秒,但 Uvicorn 2025 默认 worker idle timeout 是 30 秒,没设
pool_recycle=25就容易触发asyncpg.exceptions.InterfaceError: connection was closed
最后提醒一句
GINO 的「轻量」优势在今天反而是负担:它把连接管理、SQL 编译、结果映射全摊开给你,看似可控,实则要求你对 aiopg 底层、PostgreSQL 协议、asyncio 生命周期都心里有数。而现代框架如 Tortoise 或 SQLModel,已经把这类细节收敛进 get_pool() 或 AsyncSession 里——不是功能变少了,是你不用再为每个 await 想三遍上下文。










