Python-Flask-migrate安装和使用

在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。

更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。

环境:window11+pycharm2020.1+Anaconda4.11.0 +python3.7

Flask-sqlalchemy2.5.1

Flask-Migrate:3.1.0

一、Flask-Migrate安装

安装Flask-Migrate。pycharm(或Anaconda Prompt)打开控制台,输入:

pip install flask-migrate

安装失败,在导入flask_migrate包的时候,遇到报错:alembic安装失败

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate

Collecting alembic>=0.7

  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/60/1e/cabc75a189de0fbb2841d0975243e59bde8b7822bacbb95008ac6fe9ad47/alembic-1.4.2.tar.gz (1.1 MB)

解决:

1.先安装其他历史版本的alembic,打开

alembic · PyPI

点击release history

 

进入历史版本列表,找到1.4.3版本,点击进入下载页:

 

点击Download files,下载 alembic-1.4.3-py2.py3-none-any.whl到本地文件夹:

 

2.打开控制台,cd 进入到放alembic-1.4.3-py2.py3-none-any.whl的文件夹:

 

输入:

pip install alembic-1.4.3-py2.py3-none-any.whl

3.提示安装Mako失败,打开

Mako · PyPI

下载Mako-1.2.1-py3-none-any.whl到本地文件夹:

 

 

4.打开控制台,cd 进入到放Mako-1.2.1-py3-none-any.whl的文件夹,输入:

pip install Mako-1.2.1-py3-none-any.whl

 

Mako安装成功

5.重新安装alembic,输入:

pip install alembic-1.4.3-py2.py3-none-any.whl

 

alembic安装成功。

6.再重新安装flask_migrate:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate

 

Flask-Migrate安装成功,安装版本为3.1.0。

总结:python相关的插件安装失败的话,查看到哪一步出的问题,然后到官网直接下载对应版本到本地,进行离线安装。

二、Flask-Migrate使用

使用flask-migrate 3.1.0 迁移数据库。

flask-migrate 3.0以下一般和flask-script搭配使用,但是在3.0之后 flask-migrate去掉了MigrateCommand这个模块,根据flaks-migrate官方文档,只使用flask-migrate。

1.Flask-Migrate常用命令:

flask db history #查看历史迁移信息

flask db current #查看当前数据库版本

flask db init #初始化数据库

flask db migrate -m "init_database" #数据库迁移

flask db upgrade #更新数据库至最新版本

flask db upgrade revision_id #更新数据库至某一版本revision_id

flask db downgrade #回退一个版本

flask db downgrade revision_id  #回退至某一版本revision_id

 

2.同步表结构,在控制台中执行命令

a. init 初始化,只需执行一次。

执行init命令,初始化一个迁移文件夹:

flask db init

 

执行完毕项目中生成一个migrations目录(如需重新init,需先删除该目录再init)

 

b. migrate--将模型的变更生成迁移文件

执行migrate命令,把当前的模型添加到迁移文件中:

flask db migrate

出现问题:

ModuleNotFoundError: No module named 'MySQLdb'

解决方案:安装pymysql并将数据库连接改为 mysql+pymysql:

  1. pip install pymysql
  2. b. 将数据库连接改为 mysql+pymysql

 

 

c.update--谨慎使用

当你执行upgrade的时候它就会把除了该程序之外的所有数据表都记录下来准备删除,一但你执行了update,那些非该程序的所有数据表都会被删除!

 

执行update命令,把迁移文件中对应的数据库操作,真正的映射到数据库中:

flask db upgrade

执行完毕,数据库中会生成对应的表:

 

六、参考资料

[1] flask-migrate文档:

Flask-Migrate — Flask-Migrate documentation

posted @ 2024-04-27 00:05  猪油哥  阅读(405)  评论(0编辑  收藏  举报