『壹』 怎麼快速遷移數據從 MSSQL 到 MySQL
一、遷移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即可。
『貳』 如何通過使用「生成腳本向導」遷移資料庫
當您在 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,
[Timestamp] [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
『叄』 如何把sqlserver數據遷移到mysql資料庫及需要注意事項
二、將SQL
Server數據遷移到MySQL需要注意的一些問題
1、唯一索引的不同,sql
server的唯一索引的欄位只能允許存在一個null值,而mysql,一直oracle中唯一索引對應的欄位都允許存在多個null值。
2、存儲過程的語法存在很大的不同,存儲過程的遷移是最麻煩的,需要仔細修改。
3、程序中部分寫的SQL語句由於語法的不同也要相應的修改。
三、將SQL
Server數據遷移到MySQL的常見方法
1、使用 SQLyog 遷移
優點
該遷移方法很簡單,靈活,遷移時,可以進行欄位的修改,比如在sql
server中原來是datetime,然後遷移到mysql時你可以配置成timestamp;成功率很高;
缺點
遷移很慢!這是該方法最大的缺點,如果表的數據量達到幾十萬行,甚至幾百萬行,你會發現遷移起來真的很慢。明顯比其他遷移方法慢很多。
2、使用 powerdesigner 和 sql server 的腳本導出功能 來遷移
(1)、該方法首先使用 powerdesigner,對sql
server資料庫,進行逆向工程,得到E-R圖,然後生成MySQL的建表語句。完成資料庫結構的遷移;當然表結構的遷移,不使用powerdesigner一樣也是可以的。比如我將表結構導出成語句,然後手動進行修改,然後在MySQL中運行,也是一樣的;
(2)、然後使用 sql server的工具 SSMS,將sql
server資料庫中的表的數據,導出成insert語句,每個表對應導出一個文件,然後對文件進行一些處理,然後導入到MySQL資料庫中。
3、使用Oracle MySQL Server 官方的 workbeach 工具進行遷移
(1)、在workbench 連接sql server時,用戶需要有 view any database 的許可權。不然workbench無法訪問sql
server的表結構的元數據,從而無法進行遷移。
(2)、還有使用 Navicat 來進行遷移的方法,方法和 SQLyog 是類似的。
『肆』 如何把sqlserver數據遷移到mysql資料庫及需要注意事項
在項目開發中,有時由於項目開始時候使用的資料庫是SQL Server,後來把存儲的資料庫調整為MySQL,所以需要把SQL Server的數據遷移到MySQL。下面是小編日常整理的一種sqlserver資料庫遷移的方法。
一、SQL Server中常用數據類型與MySQL不同的地方
二、將SQL Server數據遷移到MySQL需要注意的一些問題
1、唯一索引的不同,sql server的唯一索引的欄位只能允許存在一個null值,而mysql,一直oracle中唯一索引對應的欄位都允許存在多個null值。
2、存儲過程的語法存在很大的不同,存儲過程的遷移是最麻煩的,需要仔細修改。
3、程序中部分寫的SQL語句由於語法的不同也要相應的修改。
三、將SQL Server數據遷移到MySQL的常見方法
1、使用 SQLyog 遷移
優點
該遷移方法很簡單,靈活,遷移時,可以進行欄位的修改,比如在sql server中原來是datetime,然後遷移到mysql時你可以配置成timestamp;成功率很高;
缺點
遷移很慢!這是該方法最大的缺點,如果表的數據量達到幾十萬行,甚至幾百萬行,你會發現遷移起來真的很慢。明顯比其他遷移方法慢很多。
2、使用 powerdesigner 和 sql server 的腳本導出功能 來遷移
(1)、該方法首先使用 powerdesigner,對sql
server資料庫,進行逆向工程,得到E-R圖,然後生成MySQL的建表語句。完成資料庫結構的遷移;當然表結構的遷移,不使用
powerdesigner一樣也是可以的。比如我將表結構導出成語句,然後手動進行修改,然後在MySQL中運行,也是一樣的;
(2)、然後使用 sql server的工具 SSMS,將sql server資料庫中的表的數據,導出成insert語句,每個表對應導出一個文件,然後對文件進行一些處理,然後導入到MySQL資料庫中。
3、使用Oracle MySQL Server 官方的 workbeach 工具進行遷移
(1)、在workbench 連接sql server時,用戶需要有 view any database 的許可權。不然workbench無法訪問sql server的表結構的元數據,從而無法進行遷移。
(2)、還有使用 Navicat 來進行遷移的方法,方法和 SQLyog 是類似的。
『伍』 如何將A資料庫的數據遷移到B資料庫中
工具/原料
電腦 資料庫
方法/步驟
1、首先,打開並連接Sql Server,在源資料庫Source_db上右擊,依次點擊「編寫表腳本為」→「CREATE到」→「新查詢編輯器窗口」。
『陸』 SQL2008 R2資料庫遷移到SQL2008上 網上看到說在SQL2008R2上弄一個腳本 然後再SQL2008上運行腳本就可以
MS SQL資料庫從2008 R2轉移到2008的方法
SQL Server 2008 R2導出的過程
1.打開Management Studio,登錄到伺服器,在資料庫中選擇要轉移的資料庫,
右鍵--「任務(T)」--「生成腳本(E)...」。
2.在「生成和發布腳本」窗口中,點擊「下一步」,
3.「選擇要編寫腳本的資料庫對象」,可以不做設置,點擊「下一步」,
4.點擊[保存到文件]右邊的「高級」按鈕,在對話框中,設置「為伺服器版本編寫腳本」為「SQL Server 2008」,
設置「要編寫腳本的數據的類型」為「架構和數據」。選擇保存腳本的位置。
5.下一步,再下一步。導出完成。
SQL Server 2008導入的過程
1.打開Management Studio,登錄到伺服器,
2.選擇菜單「文件」——「打開」——「文件」,選擇.sql腳本文件,點擊工具欄中的「執行」按鈕。
3.在左側的「對象資源管理器」中右鍵「資料庫」——「刷新」。完畢。
『柒』 如何把sqlserver數據遷移到mysql資料庫及需要注意事項
以下有幾款遷移工具的對比,可以參考,比較推薦DB2DB.
軟體易用性主要是指軟體在導入前的配置是否容易。由於很多軟體設計是面向程序員而非一般的資料庫管理人員、甚至是普通的應用程序實施人員,而這一類人員很多時候並沒有數據源配置經驗。因為一些使用 ODBC 或者 ADO 進行配置的程序往往會讓這類用戶造成困擾(主要是不知道應該選擇什麼類型的資料庫驅動程序)。下面讓我們看看四個工具的設計界面:
>>>>
1、SQLyog
SQLyog使用的是古老的 ODBC 連接,但對於新一代的程序來說,這種方式的非常的不熟悉並且不容易使用,並且必須要求本機安裝好相應的資料庫的 ODBC 驅動程序(SQL Server 一般自帶好)。
>>>>
2、NavicatPremium
NavicatPremium是四個應用工具中設計最不人性化的一個:從上圖怎麼也想像不到要點按那個小按鈕來添加一個新的連接,並且這個連接設置不會保存,每次導入時都必須重新設置。NavicatPremium使用的是比 ODBC 稍先進的 ADO 設置方式(199X年代的產物),但使用上依然是針對老一代的程序員。
>>>>
3、Mss2sql
Mss2sql是最容易在網路上搜索出來的工具,原因之一是它出現的時間較早。
DB2DB同樣遷移 300萬數據時,僅僅使用了 2 分 44 秒,這個速度相當驚人。不過最後的結果出現一個 BUG,就是提示了轉換成功,但後面的進度條卻沒有走完(在後面的數據完整性評測中,我們驗證了數據其實是已經全部處理完畢了)。
『捌』 如何實現數據遷移 sybase
mp和load方法,本質上是備份和恢復遷移的簡單過程如下:
1, 資料庫數據備份(老庫),使用備份腳本備份生產庫導出資料庫(雲平台old資料庫)。單用戶狀態,也可以使用壓縮備份方式(可選)
2,壓縮備份介質 已確認安裝壓縮軟體,使用圖形操作;
備份文件傳輸 備份文件ftp放到新伺服器(bin模式),放於E盤(存儲盤)
ftp IP_ADDR
bin
cd e:\
put *.zip
已確認ftp可以正常使用
3,解壓縮 使用圖形界面操作
4,備份文件導入 恢復方式load數據
use master
load database TEADB from "E:\backup\*.dat"
5,資料庫檢查 聯機資料庫
online database TEADB
檢查數據一致性
dbcc checkdb("TEADB");
『玖』 mysql資料庫遷移,有什麼工具或許辦法
可以用Mysql-front,先導出member的Excel文件,然後把user表也導出Excel,把第一個表的列拷貝到第二個Excel里,然後再把Excel文件導入到user表裡。
自己寫腳本遷移過去,where條件是member和user的對應關系(這里假定member和user對應關系使用name對應的)
update user,member set user.price=member.money,user.truename=member.nickname where user.name=member.name
『拾』 簡單分析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 腳本來處理資料庫及表的更新或改動,我覺得這樣更不容易出錯,其實各有各的好處,看自己選擇。