2022
我们一起努力

数据迁移脚本(数据迁移脚本编写)

本文目录:

  • 1、达梦数据库DM迁移之导出sql脚本
  • 2、如何通过使用“生成脚本向导”迁移数据库
  • 3、简单分析Flask 数据库迁移详情
  • 4、SVN到Git的一键迁移脚本(保留所有分支、Tag及提交记录)

达梦数据库DM迁移之导出sql脚本

原文地址:

利用达梦数据迁移工具即可

新建迁移

选择SQL=====DM,然后按照提示说明执行即可

如何通过使用“生成脚本向导”迁移数据库

当您在 Microsoft Windows Azure SQL Database中部署应用程序时,可能需要将内部部署的 SQL Server 实例上的数据库迁移到 SQL Database 中。本主题演示如何通过使用 Transact-SQL 脚本将一个简单的数据库迁移到 SQL Database。

Windows Azure SQL Database支持一部分 Transact-SQL 语言。在将数据库部署到 SQL Database 之前,您必须修改生成的脚本,使其仅包括支持的 Transact-SQL 语句。

创建 School 示例数据库

在 SQL Server Management Studio 中的“文件”菜单上,指向“新建”,然后单击“数据库引擎查询”。

在“连接到数据库引擎”对话框中,输入您本地 SQL Server 实例的信息,然后单击“连接”。

在查询窗口中粘贴本主题末尾处的 Transact-SQL 脚本,然后单击“执行”。

创建 Transact-SQL 脚本

在“对象资源管理器”中,右键单击“School”数据库,指向“任务”,然后选择“生成脚本”。

在“生成和发布脚本向导”对话框中,单击“下一步”进入“选择对象”步骤。选择“编写整个数据库及所有数据库对象的脚本”,然后单击“下一步”。

在“设置脚本编写选项”中,设置以下选项:

将“输出类型”设置为“将脚本保存到特定位置”。选择“保存到文件”。单击“单个文件”。在“文件名”中键入文件名和位置。单击“高级”。

在“高级脚本编写选项”中,将“数据库引擎类型的脚本”选项设置为“SQL Database”,将“将 UDDT 转换为基类型”选项设置为“True”,并将“要编写脚本的数据的类型”选项设置为“架构和数据”。单击“确定”。

单击“下一步”,再单击“下一步”,然后单击“完成”。

在 SQL Database 上运行脚本

通过 Windows Azure 平台管理门户或通过执行以下 Transact-SQL 命令在 SQL Database 服务器上创建 School 数据库:

CREATE DATABASE School

在 SQL Server Management Studio 中打开“查询”菜单,指向“连接”,然后选择“更改连接”。

输入 SQL Database 服务器名称和您的凭据,然后单击“选项 ”。

在“连接属性”选项卡上的“连接到数据库”下拉菜单中,键入 School,然后单击“连接”。

右键单击 SQL Database 中的“School”数据库,然后选择“新建查询”。

在 SQL Server Management Studio 中的“文件”菜单上,指向“打开”,然后单击“文件”。在“打开文件”窗口中,从您之前在“生成和发布脚本向导”中指定的位置打开 school 脚本文件。

按 F5 执行该脚本。

School 数据库 Transact-SQL 定义

运行此脚本,在 SQL Server 的本地实例中创建 School 数据库。

Transact-SQL

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

USE [master];

GO

IF EXISTS (SELECT * FROM sys.databases WHERE name = ‘School’)

DROP DATABASE School;

GO

— Create the School database.

CREATE DATABASE School;

GO

— Specify a simple recovery model

— to keep the log growth to a minimum.

ALTER DATABASE School

SET RECOVERY SIMPLE;

GO

USE School;

GO

— Create the Department table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[Department]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[Department](

[DepartmentID] [int] NOT NULL,

[Name] [nvarchar](50) NOT NULL,

[Budget] [money] NOT NULL,

[StartDate] [datetime] NOT NULL,

[Administrator] [int] NULL,

CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED

(

[DepartmentID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the Person table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[Person]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[Person](

[PersonID] [int] IDENTITY(1,1) NOT NULL,

[LastName] [nvarchar](50) NOT NULL,

[FirstName] [nvarchar](50) NOT NULL,

[HireDate] [datetime] NULL,

[EnrollmentDate] [datetime] NULL,

CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED

(

[PersonID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the OnsiteCourse table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[OnsiteCourse](

[CourseID] [int] NOT NULL,

[Location] [nvarchar](50) NOT NULL,

[Days] [nvarchar](50) NOT NULL,

[Time] [smalldatetime] NOT NULL,

CONSTRAINT [PK_OnsiteCourse] PRIMARY KEY CLUSTERED

(

[CourseID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the OnlineCourse table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[OnlineCourse]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[OnlineCourse](

[CourseID] [int] NOT NULL,

[URL] [nvarchar](100) NOT NULL,

CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED

(

[CourseID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

–Create the StudentGrade table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[StudentGrade]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[StudentGrade](

[EnrollmentID] [int] IDENTITY(1,1) NOT NULL,

[CourseID] [int] NOT NULL,

[StudentID] [int] NOT NULL,

[Grade] [decimal](3, 2) NULL,

CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED

(

[EnrollmentID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the CourseInstructor table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstructor]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[CourseInstructor](

[CourseID] [int] NOT NULL,

[PersonID] [int] NOT NULL,

CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED

(

[CourseID] ASC,

[PersonID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the Course table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[Course]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[Course](

[CourseID] [int] NOT NULL,

[Title] [nvarchar](100) NOT NULL,

[Credits] [int] NOT NULL,

[DepartmentID] [int] NOT NULL,

CONSTRAINT [PK_School.Course] PRIMARY KEY CLUSTERED

(

[CourseID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Create the OfficeAssignment table.

IF NOT EXISTS (SELECT * FROM sys.objects

WHERE object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]’)

AND type in (N’U’))

BEGIN

CREATE TABLE [dbo].[OfficeAssignment](

[InstructorID] [int] NOT NULL,

[Location] [nvarchar](50) NOT NULL,

1684608355 [timestamp] NOT NULL,

CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED

(

[InstructorID] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

— Define the relationship between OnsiteCourse and Course.

IF NOT EXISTS (SELECT * FROM sys.foreign_keys

WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnsiteCourse_Course]’)

AND parent_object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]’))

ALTER TABLE [dbo].[OnsiteCourse] WITH CHECK ADD

CONSTRAINT [FK_OnsiteCourse_Course] FOREIGN KEY([CourseID])

REFERENCES [dbo].[Course] ([CourseID])

GO

ALTER TABLE [dbo].[OnsiteCourse] CHECK

CONSTRAINT [FK_OnsiteCourse_Course]

GO

— Define the relationship between OnlineCourse and Course.

IF NOT EXISTS (SELECT * FROM sys.foreign_keys

WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnlineCourse_Course]’)

AND parent_object_id = OBJECT_ID(N'[dbo].[OnlineCourse]’))

ALTER TABLE [dbo].[OnlineCourse] WITH CHECK ADD

CONSTRAINT [FK_OnlineCourse_Course] FOREIGN KEY([CourseID])

REFERENCES [dbo].[Course] ([CourseID])

GO

ALTER TABLE [dbo].[OnlineCourse] CHECK

CONSTRAINT [FK_OnlineCourse_Course]

GO

— Define the relationship between StudentGrade and Course.

IF NOT EXISTS (SELECT * FROM sys.foreign_keys

WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Course]’)

AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]’))

ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD

CONSTRAINT [FK_StudentGrade_Course] FOREIGN KEY([CourseID])

REFERENCES [dbo].[Course] ([CourseID])

GO

ALTER TABLE [dbo].[StudentGrade] CHECK

CONSTRAINT [FK_StudentGrade_Course]

GO

–Define the relationship between StudentGrade and Student.

IF NOT EXISTS (SELECT * FROM sys.foreign_keys

WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Student]’)

AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]’))

ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD

CONSTRAINT [FK_StudentGrade_Student] FOREIGN KEY([StudentID])

REFERENCES [dbo].[Person] ([PersonID])

GO

ALTER TABLE [dbo].[StudentGrade] CHECK

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

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 脚本来处理数据库及表的更新或改动,我觉得这样更不容易出错,其实各有各的好处,看自己选择。

SVN到Git的一键迁移脚本(保留所有分支、Tag及提交记录)

注意:

1、由于用到grep、sort、awk,因此在Windows环境中需要在bash中运行,如果没有的话先安装Git即可;

2、需要安装svn的命令号工具,如果没有的话需要安装下:

在SVN中,每一个人提交时都需要在系统中有一个用户,它会被记录在提交信息内。如果想要将SVN用户映射到一个更好的Git作者数据中,你需要一个SVN用户到Git用户的映射。参考《 一键获取所有SVN提交作者用户名的列表 》获取所有SVN提交作者,参考下面的格式建立authors.txt文件:

保存到与authors.txt同一目录,并且修改里面的SVN地址。

在终端下(windows在bash下),切换到 svn2git.sh 所在的目录,执行: sh ./svn2git.sh 。 执行需要比较久的时间,需要耐心等待 ^o^ 。转换完成后,转换结果在当前目录下的svn2git。

参考:

数据迁移脚本】的内容来源于互联网,如引用不当,请联系我们修改。

赞(0)
文章名称:《数据迁移脚本(数据迁移脚本编写)》
文章链接:https://www.fzvps.com/37536.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!