Flask 集成SQLAlchemy

在这一篇中,我们将学习如何在 Flask 中集成数据库,并使用 ORM(对象关系映射)来进行数据库操作。数据库是许多 Web 应用的核心组成部分,通过使用 Flask-SQLAlchemy 这个强大的工具,我们可以轻松地与数据库进行交互。

1. Flask-SQLAlchemy简介

Flask-SQLAlchemy 是 Flask 扩展的一部分,它简化了在 Flask 应用中使用 SQLAlchemy 进行数据库操作的过程。SQLAlchemy 是一个功能强大且灵活的 Python ORM 工具,它允许我们使用 Python 对象表示数据库中的表和记录。

安装 Flask-SQLAlchemy:

bash 复制代码
pip install Flask-SQLAlchemy

2. 定义模型

在 Flask-SQLAlchemy 中,模型是通过定义 Python 类来完成的。每个类都将成为数据库中的一张表。在 models.py 中,添加一个用户模型:

python 复制代码
from flask_sqlalchemy import SQLAlchemy
import pymysql

pymysql.install_as_MySQLdb()
db = SQLAlchemy()


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), nullable=False)
    age = db.Column(db.Integer, nullable=False, index=True)
    email = db.Column(db.String(120), nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.age}', '{self.email}')"


user_index = db.Index('user_index', User.username, User.email, unique=True)

注意:

由于连接的是mysql数据库,需要依赖MySQLdb,正常来说是要按照mysqlclient,但是按照这个依赖会报错:ERROR:pip.subprocessor:Getting requirements to build wheel exited with 1

所以改为安装pymysql来代替,但是需要加入这两行代码:

python 复制代码
import pymysql
pymysql.install_as_MySQLdb()

3. 初始化Flask-SQLAlchemy

在 Flask 应用中,首先需要进行初始化。在 __init__.py 文件中,添加以下代码:

python 复制代码
from flask import Flask
from .config import Config
from flask_migrate import Migrate


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    # 注册蓝图、扩展等其他应用组件
    from app.index import index_blueprint
    from app.auth import auth_blueprint

    app.register_blueprint(index_blueprint)
    app.register_blueprint(auth_blueprint)

    from .models import db
    db.init_app(app)
    migrate = Migrate(app, db)

    return app

4. 创建数据库表

当 Flask-SQLAlchemy 中的模型发生新增或者更新时,可以通过 Flask-Migrate 进行数据库迁移。数据库迁移是一种将数据库模式更新到最新版本的过程,它允许在不丢失数据的情况下进行数据库模型的修改。

安装 Flask-Migrate

bash 复制代码
pip install Flask-Migrate

使用 Flask-Migrate

bash 复制代码
# 初始化迁移环境,这会在应用目录中创建一个名为 `migrations` 的文件夹,用于存储迁移脚本
flask db init

# 模型发生更改时,运行以下命令来创建一个新的迁移脚本
flask db migrate -m "Your migration message"

# 运行以下命令将迁移应用到数据库
flask db upgrade

5. 数据库操作

python 复制代码
from ..models import User, db
from sqlalchemy import or_, text

# 添加一条新用户记录
new_user = User(username='john_doe', email='john@example.com', age=18)
db.session.add(new_user)
db.session.commit()

# 查询所有用户
all_users = User.query.all()
for user in all_users:
    print(user)

# 通过用户名查询单个用户
user = User.query.filter_by(username='john_doe').first()
print(user)

# or操作
users = User.query.filter(or_(User.username.like('J%'), User.email.like('%@example.com%'))).all()
for user in users:
    print(user)

# like操作
users = User.query.filter(User.username.like('J%')).all()
for user in users:
    print(user)

# 排序
users = User.query.order_by(User.username.desc()).all()
for user in users:
    print(user)

# count、sum
count = db.session.query(User).count()
print(count)

ages = db.session.query(db.func.sum(User.age)).scalar()
print(ages)

# 更新用户的邮箱地址
user = User.query.filter_by(username='john_doe').first()
user.email = 'new_email@example.com'
db.session.commit()

user = User.query.filter_by(username='john_doe').first()
print(user)

# 删除用户
user = User.query.filter_by(username='john_doe').first()
db.session.delete(user)
db.session.commit()

# 直接执行sql
result = db.session.execute(text('select * from user'))
print(len(result.fetchall()))

8. 总结

本文介绍了如何在 Flask 中集成数据库,并使用 Flask-SQLAlchemy 进行简单的 ORM 操作。在实际项目中,可以通过定义更多的模型和进行复杂的查询操作来满足需求。数据库是 Web 开发中不可或缺的一部分,Flask 和 SQLAlchemy 让我们能够以更 Pythonic 的方式进行数据库操作,提高了开发效率。

相关推荐
winfredzhang24 分钟前
如何使用 python 中的 Pillow 创建可自定义的图标生成器
python·pillow·图标·png
qq_273900231 小时前
pytorch detach方法介绍
人工智能·pytorch·python
虞书欣的61 小时前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
源码12151 小时前
ASP.NET MVC宠物商城系统
后端·asp.net·宠物
FHYAAAX1 小时前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
PyAIGCMaster1 小时前
python环境中,敏感数据的存储与读取问题解决方案
服务器·前端·python
何曾参静谧2 小时前
「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库
运维·python·自动化
pumpkin845142 小时前
客户端发送http请求进行流量控制
python·网络协议·http
smj2302_796826522 小时前
用枚举算法解决LeetCode第3348题最小可整除数位乘积II
python·算法·leetcode
Ai 编码助手2 小时前
Go语言 实现将中文转化为拼音
开发语言·后端·golang