flask_migrate迁移数据库

flask框架本身不能对修改之后的模型进行迁移,因此需要使用到flask_migrate模块来进行数据库迁移管理,其使用方式类似于django中的migrate。要使用flask_migrate首先需要安装flask_migrate

pip install flask-migrate

安装完成之后,需要对项目的初始化文件manage.py添加如下的配置

mport redis
from flask import Flask
from flask_script import Manager
from flask_session import Session
from flask_migrate import Migrate,MigrateCommand

from app.model import db
from app.views import app_blueprint
app = Flask(__name__)
app.register_blueprint(blueprint=app_blueprint, url_prefix='/app')


app.secret_key = 'asdfqaz123'


# 配置session存储数据为redis
app.config['SESSION_TYPE'] = 'redis'
# 配置redis的ip和端口
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)
# 初始化flask对象app

# 第一种
# Session(app)

# 第二种
sess = Session()
sess.init_app(app)


# 数据库配置
# dialect+driver://username:[email protected]:port/database
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/flask6'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化app和db
db.init_app(app)
# 需要创建migrate对象
migrate = Migrate(app, db)

manage = Manager(app)
#给manage绑定migrate命令
manage.add_command('db',MigrateCommand)

if __name__ == '__main__':
manage.run()

进行完配置之后,需要执行以下的代码实现数据库的迁移

第一步:
python manage.py db init 初始化数据库,会创建一个migations文件夹,并且会在数据库中生成一个alembic_version表

第二步:
python manage.py db migrate 创建迁移历史

第三步:
python manage.py db upgrade 更新数据库

执行完上述步骤之后,模型就成功的迁移到了数据库,但是要注意迁移过程中的一些坑

如设计字段的时候,不能使用default来设置默认值,而是需要使用server_default

test = db.Column(db.String(10),server_default='test',nullable=True)

同样,如果迁移数据库出现以下的错误

Heroku Postgres, db migrate fail: alembic.util.exc.CommandError: Can't locate revision identified by

将alembic_version表中的数据删掉即可