Flask 入门到实战:使用 SQLAlchemy 打造可持久化的数据层
一、前言:为什么用 Flask-SQLAlchemy?
在 Python Web 开发中,操作数据库的方式主要有两种:
- 直接写 SQL(繁琐且难维护)
- 使用 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='[email protected]')
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 = '[email protected]'
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 应用中
- 数据迁移工具的基本用法