Python-Flask-migrate安装和使用

news/2024/5/19 21:25:01

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

更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/25402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MySQL-07.InnoDB数据存储结构

C-07.InnoDB数据存储结构 1.数据库的存储结构:页索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存…

以链表为基础实现链式队列——————遍历、入队、出队

以链表为基础实现链式队列 ​ 如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。​ 需要注意的点:遍历队列需要备份地址 出队需要考虑空…

Windows设置开机自启动项

一、常见软件的开机自启设置大部分安装的软件,在设置中都带有“设置开机自启”的选项,直接在软件本身的设置中勾选相应开关项即可。 二、本身无开机自启的软件或一些绿色便携式的软件 (一)实现原理Windows自带了一个启动文件夹,在此文件夹中的软件都会在开机后进行启动操作…

Unsortbin attack原理及分析

Unsortbin attack原理 ✔️条件:首先要实现Unsortbin attack前提是可以控制Unsortbin attack chunk的bk指针 ✔️目的:我们可以实现修改任意地址为一个比较大的值 ✔️原理:1.Unsortbin的来源 1.当一个较大的 chunk 被分割成两半后,如果剩下的部分大于MINSIZE,就会被放到 …

npm run dev, serve和build的区别

真实命令分别为npm run vite,npm run vite build,npm run vite preview ctrl+c结束运行的npm项目

谷歌 hackbar 不能使用的问题

谷歌 hackbar 不能使用的问题 下载 hackbar 插件:https://github.com/Mr-xn/hackbar2.1.3 解压文件,将其拖入 chrome 扩展程序中点击详情,点击下面来源的链接 会跳转到插件的安装位置,进入theme/js文件,打开hackbar-panel.js文件,将以下三处disable_hackbar()函数替换成i…

数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

通过C语言实现双向循环链表的相关功能, 并通过了Linux平台测试, 注释完整.版本:2024年4月26日 V1.0 发布于博客园/*** @file name : DoubleLinkedList.c* @brief : 实现双向循环链表的相关功能* @author :RISE_AND_GRIND@163.com* @date :2024/04/26* @version :…

猿人学内部练习平台第11题

第11题:人均会解jsl 控制台抓包可以看到,页面请求了两次 https://www.python-spider.com/challenge/11 第一次返回了一段js代码,第二次返回了所需数据:对比两次请求参数发现,只有cookie中的__jsl_clearance发生了变化,其他参数均相同,因此该值应该是第一次返回的js生成…