Flask 入门到实战(2):使用 SQLAlchemy 打造可持久化的数据层

Flask 入门到实战:使用 SQLAlchemy 打造可持久化的数据层


一、前言:为什么用 Flask-SQLAlchemy?

在 Python Web 开发中,操作数据库的方式主要有两种:

  1. 直接写 SQL(繁琐且难维护)
  2. 使用 ORM(对象关系映射),例如 SQLAlchemy

Flask-SQLAlchemy 是 Flask 官方推荐的 SQLAlchemy 封装扩展,它让数据库操作变得:

  • 更符合 Python 风格
  • 更容易维护
  • 更易于与 Flask 集成

二、环境准备

确保你已安装 Flask。如果没有:

bash 复制代码
pip install flask

然后安装 Flask-SQLAlchemy:

bash 复制代码
pip install flask_sqlalchemy

三、基本项目结构

复制代码
project/
├── app.py
└── models.py

四、配置数据库连接

app.py 中添加配置(使用 SQLite 作为示例):

py 复制代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

五、定义模型(Model)

新建 models.py 文件或在 app.py 中定义模型:

py 复制代码
from app import db

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

六、初始化数据库

创建数据库文件和表结构:

在 Python 控制台执行:

py 复制代码
from app import db
db.create_all()

这将在项目根目录生成一个 site.db 文件。

或者你也可以直接使用类似Navicat的数据库管理软件直接自己建库,然后连接。


七、增删改查操作(CRUD)

大致都遵循这样的步骤:

1.创建实例对象;

2.添加到数据库会话

3.提交会话,保存到数据库端

1. 添加用户

py 复制代码
from app import db
from models import User

new_user = User(username='alice', email='alice@example.com')
db.session.add(new_user)
db.session.commit()

2. 查询用户

py 复制代码
user = User.query.filter_by(username='alice').first()
print(user.email)

3. 修改用户

py 复制代码
user.email = 'newalice@example.com'
db.session.commit()

4. 删除用户

py 复制代码
db.session.delete(user)
db.session.commit()

八、集成到 Web 应用

你可以通过视图函数来接收用户输入并操作数据库,例如:

py 复制代码
@app.route('/add_user/<username>/<email>')
def add_user(username, email):
    # 创建用户实例
    user = User(username=username, email=email)
    # 添加到数据库会话
    db.session.add(user)
    # 提交会话到数据库
    db.session.commit()
    return f'用户 {username} 已添加'

九、数据库迁移:使用 Flask-Migrate(可选进阶)

如果项目不断发展,你会频繁变更模型结构,这时数据库迁移就变得非常重要。

安装 Flask-Migrate:

bash 复制代码
pip install flask-migrate

基本使用:

py 复制代码
from flask_migrate import Migrate

migrate = Migrate(app, db)

然后使用 CLI 工具进行版本管理:

py 复制代码
flask db init
flask db migrate -m "Initial migration"
flask db upgrade

这可以避免每次手动调用 create_all()


十、项目结构推荐(进阶)

随着项目变大,推荐使用以下结构:

md 复制代码
project/
├── app/
│   ├── __init__.py
│   ├── models.py
│   ├── routes.py
│   └── templates/
├── migrations/
├── config.py
└── run.py

使用 Flask 的工厂模式(Factory Pattern)可以提高可维护性与扩展性。


十一、总结

通过本篇内容,你已经掌握了:

  • 如何使用 Flask-SQLAlchemy 管理数据库
  • 如何定义模型并进行增删改查操作
  • 如何将数据库操作集成到 Web 应用中
  • 数据迁移工具的基本用法

接下来我们将深入学习:ORM:用 SQLAlchemy 优雅操作数据库

相关推荐
3824278275 小时前
python3网络爬虫开发实战 第二版:绑定回调
开发语言·数据库·python
BIBI20495 小时前
Windows 上配置 Nacos Server 3.x.x 使用 MySQL 5.7
java·windows·spring boot·后端·mysql·nacos·配置
dagouaofei5 小时前
培训项目总结 PPT 工具对比评测,哪款更专业
python·powerpoint
Hello eveybody5 小时前
用代码生成你的电影预告片(Python)
python
IT_陈寒5 小时前
Redis高频踩坑实录:5个不报错但会导致性能腰斩的'隐秘'配置项
前端·人工智能·后端
CoolerWu5 小时前
2025 · 我与 AI / Vibe Coding 的一年
前端·后端
不思念一个荒废的名字5 小时前
【黑马JavaWeb+AI知识梳理】Web后端开发06 - SpringBoot原理篇
spring boot·后端
AC赳赳老秦5 小时前
DeepSeek-Coder vs Copilot:嵌入式开发场景适配性对比实战
java·前端·后端·struts·mongodb·copilot·deepseek
山沐与山5 小时前
【设计模式】 Python代理模式:从入门到实战
python·设计模式·代理模式
9号达人6 小时前
支付配置时好时坏?异步方法里的对象引用坑
java·后端·面试