授课语音

Flask 数据库集成

在 Web 应用开发中,数据库通常是必不可少的部分。Flask 提供了多种方法来集成数据库,最常见的方式是通过 SQLAlchemy 扩展进行关系型数据库的操作。SQLAlchemy 是一个功能强大的 ORM(对象关系映射)库,它能简化数据库操作并与 Flask 配合得很好。

本课将介绍如何在 Flask 应用中集成数据库,使用 SQLAlchemy 进行数据存储和查询。通过本课,您将掌握如何在 Flask 应用中使用数据库进行数据持久化和管理。


1. Flask 与数据库的集成

1.1 Flask 中的数据库集成概述

Flask 没有内置的数据库支持,但它通过扩展可以轻松地与各种数据库进行集成。最常用的扩展是 Flask-SQLAlchemy,它将 SQLAlchemy ORM 和 Flask 应用结合起来,提供简单易用的接口进行数据库操作。

1.2 安装 Flask-SQLAlchemy

要在 Flask 中使用 SQLAlchemy,首先需要安装 Flask-SQLAlchemy 扩展。使用 pip 进行安装:

pip install Flask-SQLAlchemy

1.3 配置数据库连接

在 Flask 应用中配置数据库连接非常简单,只需在应用的配置中设置相关的连接字符串即可。例如,使用 SQLite 数据库:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
  • SQLALCHEMY_DATABASE_URI:数据库的 URI,Flask-SQLAlchemy 会通过该 URI 连接到数据库。
  • SQLALCHEMY_TRACK_MODIFICATIONS:是否启用对象修改追踪,默认为 True,可以禁用以减少内存消耗。

2. 定义模型

SQLAlchemy 使用 Python 类来定义数据表和与表相关联的操作。每个模型类对应数据库中的一张表,类中的属性对应表的字段。

2.1 创建模型类

下面是一个简单的 Flask-SQLAlchemy 模型类的示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.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)

    def __repr__(self):
        return f'<User {self.username}>'

# 启动 Flask 应用
if __name__ == '__main__':
    app.run(debug=True)

2.2 代码解析

  • db.Model:所有的模型类都需要继承 db.Model,它为类提供了一些默认的功能,比如自动映射表和列。
  • db.Column():定义类中的每个字段,Column 接受字段类型、约束等参数。
    • db.Integer:表示一个整数类型的字段。
    • db.String(80):表示一个最大长度为 80 的字符串字段。
    • primary_key=True:指定该字段为主键。
    • unique=True:该字段的值必须唯一。
    • nullable=False:该字段不能为空。

3. 创建和初始化数据库

创建数据库并生成数据表的操作通常在 Flask 应用启动时完成。以下是创建数据库和数据表的步骤:

3.1 创建数据库表

在定义了模型之后,可以使用 db.create_all() 来创建数据库中的表:

with app.app_context():
    db.create_all()

该命令会根据定义的模型自动创建数据库表。如果数据库文件已经存在,SQLAlchemy 会跳过已存在的表。


4. 数据库操作

4.1 添加数据

使用 SQLAlchemy 进行数据的插入非常简单。首先创建一个模型实例并通过 db.session.add() 添加到会话中,然后提交事务:

# 创建新用户
new_user = User(username='john_doe', email='john@example.com')

# 添加到数据库会话
db.session.add(new_user)

# 提交事务
db.session.commit()

4.2 查询数据

查询数据使用 query 方法,您可以根据不同的条件进行数据过滤:

# 查询所有用户
users = User.query.all()

# 查询特定用户名的用户
user = User.query.filter_by(username='john_doe').first()

# 查询用户名以 'j' 开头的用户
users_starting_with_j = User.query.filter(User.username.like('j%')).all()

4.3 更新数据

更新数据非常简单,只需获取要更新的记录并修改其属性,最后提交事务:

# 获取用户
user = User.query.filter_by(username='john_doe').first()

# 修改用户的 email
user.email = 'new_email@example.com'

# 提交修改
db.session.commit()

4.4 删除数据

删除数据使用 db.session.delete() 方法,删除后需要提交事务:

# 获取要删除的用户
user = User.query.filter_by(username='john_doe').first()

# 删除用户
db.session.delete(user)

# 提交删除操作
db.session.commit()

5. Flask 数据库事务

在 Flask 中,所有数据库操作都在一个会话中完成。一个会话包括添加、查询、更新和删除操作。所有操作在提交 (commit()) 之前都是在内存中进行的,提交后会将更改保存到数据库中。

5.1 使用事务管理

您可以使用 Flask-SQLAlchemy 的 db.session 来管理数据库事务。例如,多个操作可以放在一个事务中,这样可以确保原子性。如果某个操作失败,您可以使用 db.session.rollback() 来回滚事务。

try:
    # 开始事务
    user1 = User(username='user1', email='user1@example.com')
    user2 = User(username='user2', email='user2@example.com')

    db.session.add(user1)
    db.session.add(user2)
    
    # 提交事务
    db.session.commit()
except Exception as e:
    # 如果发生异常,回滚事务
    db.session.rollback()
    print(f"Error: {e}")

6. 总结

通过本课的学习,您已经掌握了如何在 Flask 应用中集成数据库。您学会了如何配置数据库、定义模型类、执行数据库操作(添加、查询、更新、删除)以及管理数据库事务。Flask-SQLAlchemy 提供了一种高效且灵活的方式来处理数据库操作,帮助您更容易地开发数据驱动的 Web 应用。

去1:1私密咨询

系列课程: