flask数据库迁移实际操作

要点: 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 # 升级到刚才的版本,且会创建字段

猜你喜欢

转载自blog.csdn.net/wu0che28/article/details/80713441