加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

flask_migrate

发布时间:2020-12-20 10:50:00 所属栏目:Python 来源:网络整理
导读:flask_migrate ? 1.????? flask_migrate doc: https://flask-migrate.readthedocs.io/en/latest/ 1.1.??? 简介 在使用falsk_sqlalchemy时,采用db.create_all()创建表,但在后期修改数据库表字段的时候,修改部分不会自动的映射到数据库中,必须删除表然后重

flask_migrate

?

1.????? flask_migrate

doc: https://flask-migrate.readthedocs.io/en/latest/

1.1.??? 简介

在使用falsk_sqlalchemy时,采用db.create_all()创建表,但在后期修改数据库表字段的时候,修改部分不会自动的映射到数据库中,必须删除表然后重新创建;否则就只能手动sql修改表结构了。

这样当然不好用,flask-migrate就是为了解决这个问题。它可以在每次修改模型(class)后,执行相应命令将修改的字段映射到数据库中。

?

1.2.??? install/uninstall

pip install Flask-Migrate

pip uninstall Flask-Migrate

?

1.3.??? 使用

有两种调用方式,flask db init,? python manage.py db init

后一种方式用得比较多。

案例:

?

#!/usr/bin/env python

#coding:utf-8

?

from app import create_app,db

from flask_migrate import Migrate,MigrateCommand

from flask_script import Manager

import app.models # 没有循环引用,可以直接引用

?

app = create_app()

manager = Manager(app)

migrate = Migrate(app,db)

manager.add_command(‘db‘,MigrateCommand)

?

if __name__ == ‘__main__‘:

??? manager.run()

??? pass

??? #run_app()

然后执行以下3条命令:

创建迁移仓库(migrations目录),就是初始化:

python manager.py? db init

读取类的内容,生成版本文件,并没有真正在数据库中添加或删除;

python manage.py? db migrate -m "添加性别"

python manage.py db migrate

在数据库中增删改;

python manage.py? db upgrade

?

其它命令:

去查看改变的历史状态;

python manage.py? db history

返回指定的版本状态;

python manage.py? db downgrade? base

?

2.????? 实验

2.1.??? 修改models.py并同步到数据库

修改roles,添加字段

add_comments = db.Column(db.String(200),nullable=True)

执行命令:

python manage.py db migrate

可以查看日志中有

INFO? [alembic.autogenerate.compare] Detected added column ‘roles.add_comments‘

提交到数据库,python manage.py db upgrade 输出日志

INFO? [alembic.runtime.migration] Running upgrade 136f6a80c853 -> cc904c7ceb92,empty mes

sage

?

结果验证:

sql_txt = "show columns from roles;"

[(‘id‘,‘int(11)‘,‘NO‘,‘PRI‘,None,‘auto_increment‘),(‘name‘,‘varchar(64)‘,‘YES‘,‘UNI‘,‘‘),(‘add_comments‘,‘varchar(200)‘,‘‘,‘‘)]

?

结果验证2:python manage.py? db history

136f6a80c853 -> cc904c7ceb92 (head),empty message

<base> -> 136f6a80c853,empty message

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读