FlaskMigrate使用指南

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: **Flask-Migrate** 是一个整合 Flask、SQLAlchemy 和 Alembic 的扩展,用于管理数据库迁移。安装所需库:`pip install Flask mysql-connector-python Flask-SQLAlchemy Flask-Migrate`。

FlaskMigrate使用指南

Flask-Migrate 是一个与 Flask 和 SQLAlchemy 一起使用的扩展,提供了对数据库 schema 迁移的支持。它基于 Alembic,这是一种用于处理数据库 schema 变更的工具。

安装 Flask-Migrate

首先,安装 Flask 、mysql-connector-python 、Flask-SQLAlchemy 和 Flask-Migrate:

pip install Flask mysql-connector-python Flask-SQLAlchemy Flask-Migrate

配置 Flask 应用

设置你的 Flask 应用来使用 SQLAlchemy 和 Flask-Migrate:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import os

app = Flask(__name__)

# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://username:password@hostname/test'

# 初始化 SQLAlchemy
db = SQLAlchemy(app)

# 初始化 Flask-Migrate
migrate = Migrate(app, 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)

if __name__ == '__main__':
    app.run(debug=True)

设置迁移环境

在你的项目根目录下初始化迁移环境。这会创建一个 migrations 目录来存放迁移脚本和配置文件:

flask db init

创建迁移脚本

当你对模型进行了更改(例如,添加新模型或修改现有模型)时,可以生成迁移脚本。这个命令会自动检测你的模型变化并生成相应的迁移脚本:

flask db migrate -m "init or other description"

应用迁移

将迁移应用到数据库中:

flask db upgrade

这个命令会运行所有还未应用的迁移脚本,将数据库 schema 更新到最新状态。

其他常用命令

  • 回滚迁移:将数据库回滚到上一个版本:

      flask db downgrade
    
  • 查看当前迁移状态:显示当前数据库的迁移版本:

      flask db current
    
  • 生成降级迁移脚本:生成回滚上一次迁移的脚本(如果没有自动生成的话):

      flask db downgrade -m "your description"
    

一个完整的示例

假设你的应用名称是 example

1. 初始化项目结构

项目结构如下:

example/
  app.py
  migrations/

2. 创建 app.py 文件

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate


app = Flask(__name__)

# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://username:password@hostname/test'

# 初始化 SQLAlchemy
db = SQLAlchemy(app)

# 初始化 Flask-Migrate
migrate = Migrate(app, 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)

if __name__ == '__main__':
    app.run(debug=True)

3. 初始化迁移环境

在项目根目录下运行:

flask db init

4. 创建初始迁移脚本

flask db migrate -m "initial migration"

5. 应用初始迁移

flask db upgrade

第二次升级步骤

每次你对模型进行更改后:

  1. 创建新的迁移脚本:

     flask db migrate -m "add new field"
    
  2. 应用迁移:

     flask db upgrade
    

通过上述步骤,你可以轻松管理和应用数据库 schema 的变化,确保数据库与模型保持一致。Flask-Migrate 的命令行工具使得迁移管理变得非常方便和高效。

常见问题

  • 执行 flask db migrate -m "your description" 无法生成升级脚本

    确保你的模型类已导入到 app.py 文件中,否则 Flask-Migrate 无法检测到模型变化。
    另外,确保你的数据库连接配置正确,包括数据库名称、用户名、密码等。
    假如表结构在 models 目录下,请确保你的 models 目录已添加到 app.py 文件中。比如 import models as models

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 Linux 数据安全/隐私保护
安装部署milvus单机版(快速体验)
安装部署milvus单机版(快速体验)
5435 0
IPv4内网与公网地址范围
本文介绍了内网和公网IPv4地址的范围及用途。内网IP(私有地址)包括10.0.0.0/8、172.16.0.0/12和192.168.0.0/16,分别适用于大型、中型和小型网络。公网IP分为A、B、C类,分别支持大规模、中等规模和小规模网络;D类用于多播通信,E类保留实验用途。此外,127.0.0.0/8为环回地址,不用于公网。这些划分确保了IP地址的有效利用与网络通信的正常进行。
5858 10
|
NoSQL Redis Python
python flask 使用 redis 写一个例子给我
python flask 使用 redis 写一个例子给我
566 4
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
|
NoSQL 大数据 Redis
使用 Flask 和 Celery 构建异步任务处理
使用 Flask 和 Celery 构建异步任务处理
866 2
|
JSON Linux 测试技术
第125天:Flask 项目结构
第125天:Flask 项目结构
2783 0
|
Ubuntu 网络协议 关系型数据库
|
缓存 前端开发 Python
Python Flask 编程 | 连载 07 - Jinja2 语法
Python Flask 编程 | 连载 07 - Jinja2 语法
Python Flask 编程 | 连载 07 - Jinja2 语法