flask_migrate
flask_migrate? 1.????? flask_migratedoc: https://flask-migrate.readthedocs.io/en/latest/ 1.1.??? 简介在使用falsk_sqlalchemy时,采用db.create_all()创建表,但在后期修改数据库表字段的时候,修改部分不会自动的映射到数据库中,必须删除表然后重新创建;否则就只能手动sql修改表结构了。 这样当然不好用,flask-migrate就是为了解决这个问题。它可以在每次修改模型(class)后,执行相应命令将修改的字段映射到数据库中。 ? 1.2.??? install/uninstallpip 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |