要点: 1. 工厂模式下的迁移,使用flask_script下的Manager
2. 使用迁移类Migrate将应用和数据库对象保存起来
3. 将数据库的迁移命令MigrateCommand添加到manager中
from flask import Flask
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@localhost:3306/school'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.debug=True
db=SQLAlchemy(app)
# 创建数据迁移,使用工厂模式flask_script的Manager
manager=Manager(app)
# 创建迁移对象
Migrate(app,db)
# 在manager中增加命令
manager.add_command('db',MigrateCommand)
rec = db.Table('rec',
db.Column('student_id', db.Integer, db.ForeignKey('student.id')),
db.Column('course_id', db.Integer, db.ForeignKey('course.id'))
)
class Student(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(64), unique=True)
kecheng = db.relationship('Course', secondary=rec, backref=db.backref('student', lazy='dynamic'))
class Course(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(64), unique=True)
class Course2(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(64), unique=True)
@app.route('/')
def index():
return 'Hello World!'
if __name__ == '__main__':
manager.run()
执行:
python3 migrate.py db init # 初始化
python3 migrate.py db migrate -m’first’ # 首次迁移,但是不会创建表里的字段
python3 migrate.py db upgrade # 升级到刚才的版本,且会创建字段