首页 > 其他分享 >Flask 学习-15.flask-migrate数据迁移

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

时间:2022-08-24 21:23:06浏览次数:88  
标签:__ 15 Flask app db migrate flask 迁移

前言

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:[email protected]: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

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

flask db migrate

upgrade 命令执行迁移

flask db upgrade


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

标签:__,15,Flask,app,db,migrate,flask,迁移
From: https://www.cnblogs.com/yoyoketang/p/16622333.html

相关文章

  • leetcode150:逆波兰表达式求值
    packagecom.mxnet;importjava.util.Stack;publicclassSolution150{publicstaticvoidmain(String[]args){}/***根据逆波兰表示法,......
  • 「COCI2014-2015#2」Norma 题解
    「COCI2014-2015#2」Norma题解题目大意给定一个\(n\)个数的序列\(a\),求\[\underset{i=1}{\overset{n}{\sum}}\underset{j=i}{\overset{n}{\sum}}(j-i+1)\min(a_i,a_......
  • CF1715D 2+ doors
    就像位运算要从大到小贪心考虑一样,字典序也必须从第一位到末位逐位贪心考虑!考虑按位枚举,再对于限制条件分类,对于一个点想要为0,显然跟它所限制的都要能够满足,且不能影响之......
  • 题解:【SWTR-8】15B03
    题解:【SWTR-8】15B03题目链接前言本篇题解大量配图!作为一道非常好的有思维深度的题,必须写篇题解记录一下。谨以此篇献给我的第一道构造题。第一问(80pts)求需要撤去......
  • Vue 3-150行代码实现新国标红绿灯效果案例
    昨天刷视频,都是关于新国标红绿灯的,看大家议论纷纷,下班就用150行代码通过Vue组件实践红绿模拟演示,视频也跟大家展示过了。今天接着更新图文版本,大家跟着优雅哥通过该案例实......
  • CF1715F Crop Squares 题解
    CF1715FCropSquaressolution有一个\(n\timesm\)的长方形,四个角的坐标分别为$(0,0)$,$(0,m)$,$(n,0)$,$(n,m)$。在长方形里面有一个\(1\time......
  • NC19996 [HAOI2015]树上染色
    题目链接题目题目描述有一棵点数为N的树,树边有边权。给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色。将所有点染色后,你会......
  • 第五周专题(8.8-8.14):数学(8/15)
    第五周专题(8.8-8.14):数学比赛链接线性代数A题轮状病毒(递推,DP,矩阵树定理)这题是可以暴力打表找规律来求通项,或者硬推出DP方程,但是作为数学场的第一题,我们还是小小思考......
  • KBPC1510W-ASEMI金属壳针脚方桥KBPC1510W
    编辑:llKBPC1510W-ASEMI金属壳针脚方桥KBPC1510W型号:KBPC1510W品牌:ASEMI封装:KBPCW-4正向电流:50A反向电压:1000V引脚数量:4芯片个数:4芯片尺寸:120MIL漏电流:>10ua恢复......
  • Codeforces Round #815 (Div. 2) E. Misha and Paintings
    人生中第一个AC的codeforces题,大概太难了,光是看答案就看了整整一下午,最后还是在b站上搜到讲解视频才明白的。俺们阿B真的是太厉害啦这道题首先容易看出当矩阵中数字个数......