Flask 集成SQLAlchemy

2023-12-13 12:39:07

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

1. Flask-SQLAlchemy简介

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

安装 Flask-SQLAlchemy:

pip install Flask-SQLAlchemy

2. 定义模型

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

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来代替,但是需要加入这两行代码:

import pymysql
pymysql.install_as_MySQLdb()

3. 初始化Flask-SQLAlchemy

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

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

pip install Flask-Migrate

使用 Flask-Migrate

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

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

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

5. 数据库操作

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 的方式进行数据库操作,提高了开发效率。

文章来源:https://blog.csdn.net/weixin_39987031/article/details/134829730
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。