Flask 第三方组件之 Migrate

flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的.类似于Django的python manage.py migrate

官方文档: http://flask-migrate.readthedocs.io/en/latest/

安装

pip install flask-migrate

使用举例

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)    # 后续可有db 命令

manager = Manager(app)
manager.add_command('db', MigrateCommand)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

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

 执行命令

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

# 在migrations下生成一个version文件夹,下面包含了对应版本的数据库操作py脚本。
# 由于migrate并不一定全部发现你对model的所有改动,因此生成的py脚本需要review, 有错的话则需要edit。
# 例如目前知道的,表名称表更,列名称变更,或给constraints命名等,migreate都不能发现的。更多限制细节见此:Alembic autogenerate documentation
$ python manage.py db migrate # 创建迁移历史

# 最后一步。此命令相当于执行了version文件夹下的相应py版本,对数据库进行变更操作。
# 此后,对model有变更,只要重复migrate和upgrade操作即可。
$ python manage.py db upgrade # 更新数据库

 坑

1.设计表时字段的默认值

operator = db.Column(db.String(40), nullable=True, server_default="init_data")

这里用参数server_default,而不是default

2.如果报这个错误

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

将alembic_version表中的数据删掉即可

发布了33 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fenglepeng/article/details/104674153