Flask框架如何连接SQLite3数据库,步骤是什么?
- 云服务器
- 2026-07-24
- 5
使用原生 sqlite3 模块
Flask 应用可以直接利用 Python 内置的 sqlite3 模块操作 SQLite 数据库,这种方式不需要额外安装依赖,适合简单场景。
核心实现要点:
- 在应用上下文中使用 g 对象存储数据库连接,避免重复创建。
- 通过 teardown_appcontext 装饰器注册关闭函数,确保请求结束时自动关闭连接。
- 使用 row_factory 将查询结果转换为字典,便于模板处理。
代码示例:

优点:
- 无额外依赖,轻量级。
- 对 SQLite 操作完全控制,学习成本低。
缺点:
- 需手动管理连接生命周期。
- 缺少 ORM 特性,复杂查询需手写 SQL。
使用 Flask-SQLAlchemy
Flask-SQLAlchemy 是官方推荐的扩展,封装了 SQLAlchemy ORM,支持多种数据库后端,对 SQLite 的配置非常简洁。

核心实现要点:
- 配置 SQLALCHEMY_DATABASE_URI,格式为 sqlite:///path。
- 定义模型类继承 db.Model,自动映射为数据库表。
- 通过 db.create_all() 创建表结构。
代码示例:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) @app.route('/') def index(): users = User.query.all() return render_template('index.html', users=users)
优点:

- 自动管理连接和会话,无需手动关闭。
- 提供 ORM,数据操作面向对象。
- 集成数据库迁移工具(Flask-Migrate)。
缺点:
- 额外依赖,包体积略大。
- ORM 抽象可能带来性能开销,复杂查询需学习 SQLAlchemy 表达式。
两种方法对比
| 特性 | 原生 sqlite3 | Flask-SQLAlchemy |
|---|---|---|
| 依赖 | 无 | 需要安装扩展 |
| 连接管理 | 手动 | 自动 |
| 查询方式 | 原生 SQL | ORM 或 SQL 表达式 |
| 迁移支持 | 需手动维护 | 配合 Flask-Migrate |
| 适用场景 | 小型项目、快速原型 | 中型项目、需求复杂 |
相关问题与解答
问题1:在 Flask 中使用原生 sqlite3 时,如何处理多个请求的数据库连接冲突?
解答: 使用 g 对象存储连接,每个请求拥有独立的 g 上下文。get_db() 函数在同一个请求中只创建一次连接,不同请求之间互不干扰。teardown_appcontext 确保请求结束后自动关闭连接,避免资源泄漏,若需跨请求共享连接,需使用连接池(如 sqlite3 默认不支持多线程并发,可设置 check_same_thread=False,但需谨慎)。
问题2:Flask-SQLAlchemy 中如何配置 SQLite 数据库文件路径为相对路径?
解答: URI 中使用三个斜杠 sqlite:/// 表示相对路径。sqlite:///data.db 会在项目根目录下创建 data.db 文件,若使用绝对路径,格式为 sqlite:////absolute/path,注意 Windows 路径需使用 sqlite:///C:/path 或 sqlite:///C:\path(推荐使用正斜杠)。