1.代碼
# -*- coding: utf-8 -*- from flask import Flask from flask_script import Manager from flask_sqlalchemy import SQLAlchemy from flask_migrate import MigrateCommand, Migrate app = Flask(__name__) # 數據庫的連接配置 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mysql@17.11.15.12:3306/flask_0620' # 追蹤數據庫修改的配置,如果為True,那么數據庫在數據操作的時候,會向外發出信號 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False manager = Manager(app) # 初始化SQLAlchemy對象並且將app傳入 db = SQLAlchemy(app) # 關聯遷移,將app和數據庫的操作對象傳入 Migrate(app, db, ) manager.add_command('ddbb', MigrateCommand) # 定義 角色 的模型,對應到數據庫就是一張表 # admin: class Role(db.Model): # 指定表名,可以不用寫,默認會以當前類的類名小寫作為表名 __tablename__ = "roles" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) info = db.Column(db.String(64)) # 指定關系,可以通過一個屬性將當前一的一方查詢出所對應的多的這一方的所有數據 # backref:反向引用,給user身上添加role這個屬性,並且該屬性指定的值就是當前用戶所對應的一的這一方的數據 # users和role是自己隨便起的名字 users = db.relationship('User', backref='role') def __repr__(self): return "<Role %s>" % self.name class User(db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) email = db.Column(db.String(64), unique=True) password = db.Column(db.String(64)) idcard = db.Column(db.String(64), unique=True) # 添加外鍵,指定該外鍵關系哪張表的哪一列 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) def __repr__(self): return "<User %s>" % self.name @app.route('/') def index(): return 'hello world' if __name__ == '__main__': manager.run()
2.執行遷移的命令
>初始化遷移,創建遷移所需要的一系列的命令
python manager.py ddbb init
>生成當前版本的遷移文件
python manager.py ddbb migrate -m'initial'
>執行遷移文件
python manager.py ddbb upgrade
3.當表中需要增加新的字段,如何再進行數據庫的遷移
python manager.py ddbb migrate -m'role and info clo'
python manager.py ddbb upgrade
4.遷移的回退
>版本的查看
python manager.py ddbb current
python manager.py ddbb history
>返回到某一個版本
python manager.py ddbb downgrade(upgrade) 版本號