一、定义
flask-migrate
是基于Alembic
的一个封装,并集成到Flask
中- 所有的迁移操作其实都是
Alembic
做的,能跟踪模型的变化,并将变化映射到数据库中。
二、Flask-Migrate安装
pip install flask-migrate
三、使用Flask-Migrate步骤
实例展示:
目录结构:
flask_SQLalchemy:.
│ config.py
│ app.py
│ manager.py
│ models.py
│ __init__.py
config.py文件(数据库配置文件):
class Configs: ENV='development' DEBUG=True # 设置连接数据库路径 SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:[email protected]:3308/flask_test' # 每次请求结束后自动提交数据库中的改动 SQLALCHEMY_COMMIT_ON_TEARDOWN=True # 禁用SQLAlchemy对追踪对象的修改并且发送信号 SQLALCHEMY_TRACK_MODIFICATIONS = True # 操作数据库时显示原始SQL语句 SQLALCHEMY_ECHO=True
app.py文件(连接数据库):
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类),内容如下:
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文件(数据迁移管理,运行后将生成一个文件夹),内容如下:
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表结构
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
标签:__,Flask,app,py,db,Migrate,manager,详解,import From: https://www.cnblogs.com/xfbk/p/16785583.html