Flask 学习-15.flask-migrate数据迁移
  iKXeBmqdRgYF 2023年11月02日 33 0

前言

Flask-SQLAlchemy ORM 可以直接操作数据库,可以用​​db.create_all()​​​代码同步表到数据库。
当我们需要修改表的字段,比如对表新增字段,修改字段的时候需用到flask-migrate 插件来同步迁移数据。

flask-migrate 迁移数据

django 框架里面可以用migrate 命令进行数据库的同步,Flask 框架有个flask-migrate 插件可以实现类似功能。
通过命令行操作实现数据库的同步。

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

app = Flask(__name__)
# 设置数据库连接地址
DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 是否追踪数据库修改,一般不开启, 会影响性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 是否显示底层执行的SQL语句
app.config['SQLALCHEMY_ECHO'] = True

# 初始化db,关联flask 项目
db = SQLAlchemy(app)
# 迁移组件初始化
Migrate(app, db)


# 创建模型
class Students(db.Model):
__tablename__ = 'students' # 数据库表名

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
fullname = db.Column(db.String(30))
nickname = db.Column(db.String(30))

def __repr__(self):
return f"<Students(name='{self.name}', fullname='{self.fullname}', nickname='{self.nickname}')>"


class Users(db.Model):
__tablename__ = 'user' # 数据库表名

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))

def __repr__(self):
return f"<Users(id='{self.id}', name='{self.name}')>"

执行迁移命令,先设置环境变量, 如果启动文件是app.py 这步可以省略。

set FLASK_APP=app.py  # 设置环境变量指定启动文件

windows用set设置环境变量,linux 用export 设置环境变量

export FLASK_APP=app.py  # 设置环境变量指定启动文件

执行相关命令

flask db init  # 生成迁移文件夹  只执行一次
flask db migrate # ⽣成迁移版本, 保存到迁移文件夹中
flask db upgrade # 执行迁移

迁移命令

init 命令执行后,会生成migrations目录

flask db init

Flask 学习-15.flask-migrate数据迁移_flask

migrate 命令生成迁移脚本,保存到迁移文件夹中versions目录

flask db migrate

Flask 学习-15.flask-migrate数据迁移_数据库_02

upgrade 命令执行迁移

flask db upgrade

Flask 学习-15.flask-migrate数据迁移_Flask_03


执行完upgrade 命令才会在数据库中生成表



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  bzUvzvVq9oY1   2023年11月02日   29   0   0 数据类型json数据库
  KtCMyDnFN1Sj   2023年11月02日   31   0   0 hibernate主键数据库
  20xfzlOvosRH   2023年12月05日   13   0   0 mysql数据库
iKXeBmqdRgYF
最新推荐 更多