Databases:异步数据库操作,一个库就够了
Databases 是一个 Python 异步数据库操作库,提供统一 API 支持 PostgreSQL、MySQL 和 SQLite。它封装了 asyncpg、aiomysql 等异步驱动,基于 SQLAlchemy Core 表达式语言,无需线程池即可实现高效查询。该库与主流异步框架(FastAPI、Starlette 等)无缝集成,适合需要轻量级数据库访问层或跨数据库兼容的开发者。通过简单的
Databases:异步数据库操作,一个库就够了
databases 在 GitHub 上已经拿到 4,004 Star 了。
encode 团队出品的这个库,专门解决一件事:给 Python 异步 Web 框架提供一套统一的数据库操作接口。基于 SQLAlchemy Core 的表达式语言,支持 PostgreSQL、MySQL 和 SQLite 三种数据库。
1、这玩意儿是干嘛的
就一件事:让你在异步 Python 应用里用同一套 API 操作不同数据库。
传统的数据库驱动同步执行,请求一多就得开线程池做并发。databases 把 MySQL、PostgreSQL、SQLite 的异步驱动全包了,你写一套查询代码,换数据库只改连接字符串。底层驱动差异它帮你吞掉了。

2、为什么要用它
写过异步 Web 服务的人都踩过这个坑:框架是异步的,数据库驱动是同步的,中间硬塞一层线程池做桥接。线程切换的开销不说,连接池管理还得自己兜底。
databases 把这件事做干净了。底层挂接 asyncpg、aiomysql、aiosqlite 等成熟异步驱动,上层暴露 SQLAlchemy Core 的表达式语言。写出来的查询不依赖具体数据库方言,性能也不会因为同步阻塞打折扣。
另一个好处是和框架集成几乎没有成本。Starlette、FastAPI、Sanic、aiohttp、Quart、Responder、Tornado,只要你的框架支持在异步上下文里跑数据库操作,挂上去就能用。不用改中间件,不用额外配置。
3、支持哪些数据库

数据库驱动方面覆盖了目前主流的异步选择:
- PostgreSQL:asyncpg、aiopg
- MySQL:aiomysql、asyncmy
- SQLite:aiosqlite
如果你用了 alembic 做数据迁移或者调用 SQLAlchemy 同步方法(比如 create_all),还是要装对应的同步驱动(psycopg2 或 pymysql)。这些不属于 databases 本身的范围,但项目文档里交代得很清楚。
4、安装和快速上手
安装核心库:
pip install databases
按需装数据库驱动:
pip install databases[asyncpg] # PostgreSQL
pip install databases[aiomysql] # MySQL
pip install databases[aiosqlite] # SQLite
建一张表、插几条数据、查出来,全部用 async/await:
from databases import Database
database = Database('sqlite+aiosqlite:///example.db')
await database.connect()
# 建表
query = """CREATE TABLE HighScores (id INTEGER PRIMARY KEY, name VARCHAR(100), score INTEGER)"""
await database.execute(query=query)
# 批量写入
query = "INSERT INTO HighScores(name, score) VALUES (:name, :score)"
values = [
{"name": "Daisy", "score": 92},
{"name": "Neil", "score": 87},
{"name": "Carol", "score": 43},
]
await database.execute_many(query=query, values=values)
# 查询
rows = await database.fetch_all(query="SELECT * FROM HighScores")
配合 SQLAlchemy Core 表达式还能写出更复杂的跨数据库查询,不用手写不同方言的 SQL,也不用引入完整的 ORM 层。
5、适合哪些人用
- 在用 FastAPI、Starlette 等异步框架搭 Web 服务,需要一个轻量数据库访问层的后端开发者
- 不想引入完整 ORM(Django ORM、SQLAlchemy ORM),只需要查询构建器的那批人
- 项目需要同时跑 PostgreSQL 和 MySQL,希望用一套 API 统一操作,减少迁移成本
- 在做数据密集型微服务,对数据库连接并发性能有要求
那批人
- 项目需要同时跑 PostgreSQL 和 MySQL,希望用一套 API 统一操作,减少迁移成本
- 在做数据密集型微服务,对数据库连接并发性能有要求
更多推荐

所有评论(0)