Administrator
发布于 2025-06-30 / 1 阅读
0
0

Flask 中初始化 SQLite 数据库的完整指南

在 Web 应用开发中,数据库是存储和管理数据的核心组件。对于 Flask 项目而言,SQLite 因其轻量级、零配置的特性,非常适合小型应用或开发阶段使用。本文将详细介绍如何在 Flask 中通过 Flask-SQLAlchemy 扩展初始化 SQLite 数据库。

一、环境准备与依赖安装

Flask-SQLAlchemy 是 Flask 官方推荐的 SQLAlchemy 集成扩展,它提供了 ORM(对象关系映射)功能,无需直接编写 SQL 语句即可操作数据库。


安装命令


bash

pip install flask flask-sqlalchemy

二、基础配置与应用初始化

  1. 创建 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)
    

  2. 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}>'

四、创建数据库与表结构

  1. 通过 Flask Shell 创建表

    bash

    # 进入Flask Shell环境
    flask shell
    


    在 Shell 中执行:

    python

    from your_app import db  # 导入db对象
    db.create_all()  # 创建所有模型对应的表结构
    

  2. 完整初始化示例
    以下是一个包含路由和数据库操作的完整示例:

    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)
    

五、关键操作与注意事项

  1. 数据库基本操作

    • 新增记录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()

  2. 进阶功能推荐

    • 数据库迁移:使用Flask-Migrate处理模型变更(避免重新创建数据库)。

    • 事务管理:通过db.session.begin()db.session.rollback()确保数据一致性。

  3. 注意事项

    • 生产环境中建议使用绝对路径指定数据库位置,避免权限问题。

    • 大型应用建议切换至 PostgreSQL 或 MySQL 等更专业的数据库。

六、总结

通过 Flask-SQLAlchemy 初始化 SQLite 数据库仅需几步即可完成,其 ORM 特性让数据库操作变得简洁直观。对于小型项目或开发测试场景,SQLite 是轻量级且高效的选择;而当应用规模扩大时,可通过修改 URI 轻松切换至其他关系型数据库,体现了 Flask 框架的灵活性。


评论