在实际开发环境中,经常会发生数据库修改的行为。一般我们修改数据库不会手动取修改,而是取修改 orm 模型,然后在把模型映射到数据库中。
而 flask-migrate 就是这样一种工具 ,它的底层是 alembic 。
安装:
pip install flask-migrate
使用
要让 flask-migrate 能够管理 app 中的数据库,需要使用 Migrate(app,db)
来绑定 app 和 数据库。假如现在有以下文件:
# app.py
from flask import Flask
import config
from exts import db
from models import User
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app) #
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
# exts.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# models.py
from exts import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), nullable=False)
# config.py
HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'flask_migrate_demo'
USERNAME = 'root'
PASSWORD = 'chenkuan1110'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
现在通过 flask-script
来配置 flask-migrate
# manage.py
from flask_script import Manager
from app import app
from exts import db
from flask_migrate import Migrate, MigrateCommand
manager = Manager(app) # 创建manager对象
Migrate(app, db) # 绑定 app 和 db
manager.add_command('db', MigrateCommand) # 添加flask-migrate子命令
if __name__ == '__main__':
manager.run()
现在就可以通过 python manage.py db xxx
来运行 flask-migrate
中的命令来映射数据库等操作,如
- 初始化迁移文件:
python manage.py db init
- 将模型映射到文件中
python manage.py db migrate
- 将添加的映射文件添加到数据库:
python manage.py db upgrade
flask-migrate 使用注意事项
- 需要将映射到数据库的模型导入到 manager.py 中 ,显示导入,不然不能创建迁移文件
网友评论