在 Web 应用开发中,数据库是存储和管理数据的核心组件。对于 Flask 项目而言,SQLite 因其轻量级、零配置的特性,非常适合小型应用或开发阶段使用。本文将详细介绍如何在 Flask 中通过 Flask-SQLAlchemy 扩展初始化 SQLite 数据库。
一、环境准备与依赖安装
Flask-SQLAlchemy 是 Flask 官方推荐的 SQLAlchemy 集成扩展,它提供了 ORM(对象关系映射)功能,无需直接编写 SQL 语句即可操作数据库。
安装命令:
bash
pip install flask flask-sqlalchemy
二、基础配置与应用初始化
创建 Flask 应用并配置数据库
首先需要实例化 Flask 应用,并通过app.config设置 SQLite 数据库的 URI(统一资源标识符)。python
from flask import Flask from flask_sqlalchemy import SQLAlchemy # 初始化Flask应用 app = Flask(__name__) # 配置SQLite数据库(相对路径,数据库文件将创建在应用根目录) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' # 关闭模型变更追踪(减少内存消耗) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 初始化数据库对象 db = SQLAlchemy(app)URI 格式说明
相对路径:
sqlite:///app.db(推荐,文件位于应用根目录)绝对路径:
sqlite:////absolute/path/app.db(注意路径前的三个斜杠)
三、定义数据模型(Model)
通过继承db.Model创建数据库表的映射类,每个类对应一个数据库表,类属性对应表中的字段。
示例:创建用户表模型
python
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # 主键,自增整数
username = db.Column(db.String(80), unique=True) # 唯一用户名,最大长度80
email = db.Column(db.String(120), unique=True) # 唯一邮箱
created_at = db.Column(db.DateTime, default=datetime.utcnow) # 创建时间
def __repr__(self):
return f'<User {self.username}>'
四、创建数据库与表结构
通过 Flask Shell 创建表
bash
# 进入Flask Shell环境 flask shell在 Shell 中执行:
python
from your_app import db # 导入db对象 db.create_all() # 创建所有模型对应的表结构完整初始化示例
以下是一个包含路由和数据库操作的完整示例:python
from flask import Flask, jsonify from flask_sqlalchemy import SQLAlchemy import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.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(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow) # 示例路由:创建用户 @app.route('/api/users', methods=['POST']) def create_user(): data = request.json user = User( username=data['username'], email=data['email'] ) db.session.add(user) db.session.commit() return jsonify({'id': user.id, 'message': '用户创建成功'}) if __name__ == '__main__': app.run(debug=True)
五、关键操作与注意事项
数据库基本操作
新增记录:
db.session.add(obj)+db.session.commit()查询记录:
User.query.filter_by(username='john').first()更新记录:
obj.attr = new_value+db.session.commit()删除记录:
db.session.delete(obj)+db.session.commit()
进阶功能推荐
数据库迁移:使用
Flask-Migrate处理模型变更(避免重新创建数据库)。事务管理:通过
db.session.begin()和db.session.rollback()确保数据一致性。
注意事项
生产环境中建议使用绝对路径指定数据库位置,避免权限问题。
大型应用建议切换至 PostgreSQL 或 MySQL 等更专业的数据库。
六、总结
通过 Flask-SQLAlchemy 初始化 SQLite 数据库仅需几步即可完成,其 ORM 特性让数据库操作变得简洁直观。对于小型项目或开发测试场景,SQLite 是轻量级且高效的选择;而当应用规模扩大时,可通过修改 URI 轻松切换至其他关系型数据库,体现了 Flask 框架的灵活性。