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、支持哪些数据库

README区域截图

数据库驱动方面覆盖了目前主流的异步选择:

  • 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 统一操作,减少迁移成本
  • 在做数据密集型微服务,对数据库连接并发性能有要求
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐