简单分析Flask 数据库迁移详情

简单分析Flask 数据库迁移详情,第1张

1、使用 Flask-Migrate 实现数据库迁移

db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现了数据库迁移的概念。

在开发过程中,随着需求的变化,有可能需要添加或修改表的一些字段,但是原表中的数据不能删除,此时就需要创建新表,并将旧表中的数据迁移至新表中,Flask-Migrate这个扩展就可以在不破坏数据的情况下更新数据库表的结构,并完成数据从旧表到新表的迁移。

2、Flask-Migrate的使用

可以使用pip install flask-migrate进行安装。在程序中,我们实例化 Flask_Migrate 提供的 Migrate 类,进行初始化 *** 作。

实例化 Migrate 类,需要传入 Flask 实例 app 和 SQLAlchemy创建的实例 db。

2.1 数据库的迁移过程

先定义 User 模型类。

创建迁移环境

在开始迁移数据之前,需要先使用下面的命令创建一个迁移环境:

迁移环境只需创建一次,创建后会在项目根目录下生成一个 migrations 目录,其中包含了自动生成的配置文件和迁移版本目录。

生成迁移脚本

使用如下命令自动生成迁移脚本

-m 选项添加备注信息,执行后迁移版本目录生成了迁移脚本。

迁移脚本内有两个函数:

upgrade():把迁移中的改动应用到数据库中

downgrade():将改动撤销

自动生成的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容,不一定完全正确,有必要再进行检查一下。

更新数据库

生成了迁移脚本后,使用flask db upgrade命令可完成对数据库的更新。执行后即可生成数据库及表。

如果之后我们需要改动 user 表中的字段,比如添加一个mobile字段,我们只需在 User 模型类中添加该属性,之后执行flask db migrate -m '注释'和flask db upgrade命令即可。

如果想要回滚迁移的话,可以执行flask db downgrade命令。

3、总结

这里只是介绍如何在 Flask 中进行数据库迁移,关于在生产环境下,是否需要使用迁移工具或者使用何种工具进行迁移,这里不做讨论,至于我的话,在生产环境中,我没有使用过Flask-Migrate,而是选择编写 SQL 脚本来处理数据库及表的更新或改动,我觉得这样更不容易出错,其实各有各的好处,看自己选择。

工具/原料

电脑   数据库

方法/步骤

1、首先,打开并连接Sql Server,在源数据库Source_db上右击,依次点击“编写表脚本为”→“CREATE到”→“新查询编辑器窗口”。

2、在第1步产生的编辑器中按”crtl+a“全选内容,右击选择“复制“。

3、右击点击”粘贴“,将代码中Source_db(源数据库名)改为target_db(目标数据库名)。

4、右键单击”执行“。

5、在目标数据库的表结构中即可看到被复制过来的数据。

一、迁移Database

Schema。

首先使用Sybase

Powerdesigner的逆向工程功能,逆向出SQL

Server数据库的物理模型。具体 *** 作是在Powerdesigner中选择“File”,“Reverse

Engine”再选择Database,将DBMS选择为SQL

Server

然后选择数据源,也就是要具体连接到的SQL

Server数据库服务器,然后选择要逆向的数据库名,比如选中“WSS_Content_80”

单击确定即可生成物理模型图,然后单击“Database”菜单下的Change

Current

DBMS修改当前的DBMS,改为MySQL

5.0,单击确定后即可生成MySQL的物理模型

然后单击“Database”菜单下的“Generate

Database”生成数据库脚本文件。

接下来手工修改下生成的脚本的内容。将其中的dbo.全部替换成空,将create

user这样的语句删除掉。

如果有些字符在MySQL中是关键字,那么必须使用“`”(键盘上数字1左边那个符合)符合框起来。

加上MySQL所需要的存储引擎比如每个建表语句后跟上:

ENGINE

=

INNODB

CHARACTER

SET

utf8

COLLATE

utf8_general_ci将生成的脚本在MySQL中去运行一次即可创建数据库。

二、迁移数据内容

数据内容只能通过生成INSERT语句的方式来做。

首先使用SSMS的“生成脚本”功能(在数据库上右键,选择“任务”“生成脚本”选项),可以为SQL

Server数据库中的数据生成插入脚本。

首先选择要迁移数据的表,这里我们全选所有的表

然后单击下一步,选择将脚本保存到新的查询窗口

单击“高级”选项,在高级选项窗口中选择“要编写脚本的数据的类型”为仅限数据

然后“确定”再下一步下一步即可生成INSERT脚本文件。

修改生成的脚本文件,主要有以下几项修改:

使用批量替换的方式去掉[

]这是SQL

Server的符合,在MySQL中不用这个。

使用批量替换的方式去掉dbo.

有些单词在MySQL中是关键字的,那么需要使用“`”引起来。

关于Datetime类型的数据,需要手工修改下,SQL

Server默认生成的是这样的语句,在MySQL中是没办法解析的:

CAST(0x00009EEF00000000

AS

DateTime)

为每一行添加一个表示一个插入语句结束。这个分号在SQL

Server中可以不需要,但是在MySQL中是必须的。简单的方法是使用高级的文本编辑器(比如Notepad++),将\r\n替换为\r\n即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6804619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存