在flask中使用flask-migrate管理数据库

Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作。

安装

pip3 install Flask-Migrate

例子:test.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

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

db = SQLAlchemy(app)
migrate = Migrate(app, db)

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

上述代码指定数据库为lrh.db,如果不存在将新建;我们建立了User模型,指定它对应的在数据库中的名字为users,注意此时表还没有在建立。数据库需要指定,此代码也没有新建数据库app.db,如果URI中指定的数据库原先不存在,则没有app.db这个数据库存在。

使用flask命令运行上面的代码需要先设置环境变量FLASK_APP

export FLASK_APP=test.py       #注释:注意等号两边不能有空格

常用命令

初始化
flask db init

这个命令将会新建一个名字为migrations的文件夹,并且记录一个数据库版本号,一份保留在migrations中,一份保存在数据库中(新建一张名字为alembic_version的表来保存),值得注意大是新建了migrations文件夹后需要对数据库模型进行修改,然后使用flask-migrations进行迁移,这样才产生第一个版本号。

迁移
flask db migrate

迁移脚本最好仔细审查并且按需编写,因为Alembic(flask-migrate的核心)不会检测模型所有大变化,可以参考这个链接,查看Alembic的限制。如果不修改将使用默认策略迁移。

升级
flask db upgrade

每次数据库模型变化,需要重复使用migrate命令和upgrade命令(按顺序组合使用),使用成功后将修改版本号。

帮助
flask db --help

使用这个命令查看更多命令。


使用flask-script和flask-migrate

之前的例子没有额外建立数据库,不便于学习,这里使用flask-script管理数据库创立,此外flask-migrate也支持flask-script的命令行接口,所以可以用flask-script统一管理。

#-*- coding:utf-8 -*-
#filename: manage.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand

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

db = SQLAlchemy(app)
migrate = Migrate(app, db)


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

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

def make_shell_context():
    return dict(app=app, db=db, User=User)

manager.add_command("shell", Shell(make_context=make_shell_context))


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

(1)flask-migrate提供了一个ManagerCommand类,可以附加在flask-script的Manager类实例上。

(2)使用add_command()添加一个shell命令,并且将db,app,User加入上下文中。使用shell命令将进入python shell状态,由于将db加入了上下文,可以使用shell手动创建数据库,使用python代码:

ubuntu命令行状态下:python3 manage.py shell
进入python shell:
>>>db.create_all()                 #注释:如果数据库不存在,将新建数据库

使用flask-script管理数据后,命令如下:

python3 manage.py db init
python3 manage.py db migrate
python3 mange.py db upgrade
python3 mange.py db --help

在你使用上述命令后(建立了数据库),和第一个例子一样,将在数据库和本地保存数据库版本号。本文使用的是sqlite数据库,可以下载相关可视化工具,查看数据库中的版本号。


使用flask-migrate遇到的问题:点击链接

有关flask-script的博客:点击链接

flask-migrate的文档:点击链接

欢迎提出问题,共同进步。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值