Flask-SQLAlchemy:Flask 的数据库搭档
Flask-SQLAlchemy:Flask 的数据库搭档
用 Flask 写 Web 应用,数据库操作是绕不开的环节。Flask 本身设计得很精简,没有内置 ORM,需要开发者自己选择数据库工具。Flask-SQLAlchemy 就是来解决这个问题的,它在 Flask 里集成 SQLAlchemy,把数据库操作变得简单直接。
这个项目目前 4,314 Star,属于 Pallets 社区生态的一部分。Pallets 就是维护 Flask 的那个开源组织,所以这个扩展和 Flask 的兼容性是有底子的。

它到底简化了什么
SQLAlchemy 是 Python 生态里功能最全的 ORM 之一,但和 Flask 配合使用时,有些配置需要手动处理。比如创建数据库引擎、管理会话生命周期、处理应用上下文绑定。Flask-SQLAlchemy 把这些打包成一个扩展,开箱即用。
具体提供了什么:
- 自动根据 Flask 配置初始化数据库连接
- 会话自动绑定到应用上下文,不用手动创建和关闭
- 提供
db.Model基类,模型定义更简洁 - 集成 Flask 的扩展机制,初始化方式和其他扩展统一
看一段代码就明白了:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"
class Base(DeclarativeBase):
pass
db = SQLAlchemy(app, model_class=Base)
class User(db.Model):
id: Mapped[int] = mapped_column(primary_key=True)
username: Mapped[str] = mapped_column(unique=True)
with app.app_context():
db.create_all()
db.session.add(User(username="example"))
db.session.commit()
users = db.session.scalars(db.select(User))
从配置到模型定义,再到建表和增删改查,几行代码就能跑起来。不需要自己处理连接池、会话关闭这些底层细节。

为什么选它
1. 官方生态
它是 Pallets Community Ecosystem 的项目,和 Flask 同根同源。维护方熟悉 Flask 的底层机制,兼容性和更新节奏都有保障。用到生产环境里,不用担心某天突然没人维护了。
2. 减少样板代码
没有它的话,每个 Flask 项目都要自己写一套 SQLAlchemy 集成代码。连接怎么建、会话怎么管、请求结束后怎么清理,这些都要自己实现。Flask-SQLAlchemy 把这些抽象成一个扩展,安装完直接 import 就能用。
3. 适配现代 SQLAlchemy
从 3.0 版本开始,它适配了 SQLAlchemy 2.0 风格。支持 Mapped 类型注解、mapped_column 等新写法,类型提示更完整,和现代 Python 开发习惯对齐。
适合什么场景
如果你在用 Flask 做 Web 开发,需要操作关系型数据库,这个扩展基本是标配。小到个人项目,大到生产环境,它都能覆盖。
如果你已经在用 SQLAlchemy 但还没和 Flask 集成,换过来能省不少配置代码。如果你刚开始学 Flask 的数据库操作,用它入门也比较顺,官方文档写得清楚,示例也全。
总之,Flask-SQLAlchemy 做的事很明确:让 Flask 开发者少写数据库相关的配置代码,把精力放在业务逻辑上。工具本身不花哨,但确实解决了实际问题。4,314 个 Star 说明用的人不少,口碑也稳。

浙公网安备 33010602011771号