Fork me on GitHub

Flask学习笔记(十二)-Flask-Migrate实现数据库迁移详解

一、定义

  • flask-migrate是基于Alembic的一个封装,并集成到Flask
  • 所有的迁移操作其实都是Alembic做的,能跟踪模型的变化,并将变化映射到数据库中。

二、Flask-Migrate安装

1
pip install flask-migrate

三、使用Flask-Migrate步骤 

实例展示:

目录结构: 

flask_SQLalchemy:.
  │ config.py
  │ app.py
  │ manager.py
  │ models.py
  │ __init__.py

config.py文件(数据库配置文件):

1
2
3
4
5
6
7
8
9
10
11
class Configs:
    ENV='development'
    DEBUG=True
    # 设置连接数据库路径
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@xxx.116.152.57:3308/flask_test'
    # 每次请求结束后自动提交数据库中的改动
    SQLALCHEMY_COMMIT_ON_TEARDOWN=True
    # 禁用SQLAlchemy对追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 操作数据库时显示原始SQL语句
    SQLALCHEMY_ECHO=True

app.py文件(连接数据库):  

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import Configs
db = SQLAlchemy()
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = Configs.SQLALCHEMY_DATABASE_URI
 
@app.route('/')
def index():
    return "Hello!"
 
if __name__ == '__main__':
    app.run()

  model.py文件(作用是存储一个User类),内容如下:

1
2
3
4
5
6
7
8
9
10
from app import db
 
class User(db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(60), nullable=False)
    password = db.Column(db.String(30), nullable=False)
 
    def __repr__(self):
        return '<User %s>' % self.username

manager.py文件(数据迁移管理,运行后将生成一个文件夹),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from app import db,app
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from models import User
 
# !!!绑定app和数据库
migrate = Migrate(app,db)
manager = Manager(app)
db.init_app(app)
manager.add_command('db', MigrateCommand)
 
if __name__ == '__main__':
    manager.run()

迁移步骤:

1、进入项目目录通过命令行执行:

   初始化一个环境:python manager.py db init

   自动检测模型,生成迁移脚本:python manager.py db migrate

   将迁移脚本映射到数据库中:python manager.py db upgrade

执行命令:

 

 数据库表展示:

 2、修改model.py内容更新user表结构

1
2
3
4
5
6
7
8
9
10
from exts import db
 
class User(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(80),unique=True)
    password = db.Column(db.String(30), nullable=False)
    test = db.Column(db.String(50), nullable=False)       #新添加的一列
 
    def __repr__(self):
        return '<User %s>' % self.username

修改后执行:

python manager.py db init:这个命令不需要执行,因为已经初始化了迁移脚本的环境,这个命令只执行一次。

python manager.py db migrate:这个命令需要执行,因为模型改变了。

python manager.py db upgrade这个命令也需要执行,每次运行了migrate命令后,就记得要运行这个命令。

查看对应表结构变化:

 可以看到test字段已经更新到数据表中

备注:

报错cannot import name 'soft_unicode' from 'markupsafe' 的解决方法

pip install --user --upgrade aws-sam-cli 

  

 

 

 

  

  

posted @   橘子偏爱橙子  阅读(455)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示