如何使用python轉(zhuǎn)移mysql數(shù)據(jù)庫中的全部數(shù)據(jù)
數(shù)據(jù)庫到期
今天,有人告訴我,“馬上就要雙十一了,我遇到了一個(gè)問題。”
我很好奇,“是什么問題呢?關(guān)于雙十一的商品折扣嗎?”
他說,“不,是我之前雙十一的時(shí)候,購(gòu)買的mysql數(shù)據(jù)庫到期了,但是因?yàn)閮r(jià)格較高,我不打算繼續(xù)續(xù)費(fèi)了,現(xiàn)在希望將其中的數(shù)據(jù)轉(zhuǎn)移出去,該怎么做呢?“
確實(shí),雖然專業(yè)的數(shù)據(jù)庫服務(wù)非常好,但是價(jià)格上還是比較貴的,每年可能需要花費(fèi)數(shù)百元,如果需求量不大,要求不高的情況下,可能確實(shí)不如自己安裝一個(gè)比較節(jié)省。

那么,將數(shù)據(jù)庫中的數(shù)據(jù)全部遷移出來,通常不是什么困難(尤其是在數(shù)據(jù)量并非巨大的情況下),下面,就介紹幾種方法,可以有效的幫助數(shù)據(jù)的保存與轉(zhuǎn)移。
常規(guī)保存
mysqldump
使用mysqldump工具可以將數(shù)據(jù)庫導(dǎo)出為sql文件
mysqldump -u 用戶名 -p -B 數(shù)據(jù)庫名 > 導(dǎo)出文件.sql
# 可選選項(xiàng):--set-gtid-purged=OFF 避免備份無關(guān)的全局事務(wù)標(biāo)識(shí)符
# 可選選項(xiàng):--single-transaction 保證數(shù)據(jù)一致性
mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction -B 數(shù)據(jù)庫名 > 導(dǎo)出文件.sql
在需要恢復(fù)的地方執(zhí)行
mysql -u 用戶名 -p < 導(dǎo)出文件.sql
注意:如果使用mysqldump導(dǎo)出大量數(shù)據(jù)會(huì)耗時(shí)較長(zhǎng),因此更適合對(duì)中小規(guī)模的數(shù)據(jù)庫使用。
將表數(shù)據(jù)寫入文件
查詢某表的所有數(shù)據(jù),并將其寫入到文件中
mysql -u 用戶名 -p -e "SELECT * FROM 數(shù)據(jù)庫名.表名" > "文件名.txt"
使用python保存
python直接轉(zhuǎn)存
對(duì)于mysql數(shù)據(jù)庫,可以使用pymysql查詢出其中的所有數(shù)據(jù),然后插入到目標(biāo)數(shù)據(jù)庫。
import pymysql
# 連接源數(shù)據(jù)庫
source_conn = pymysql.connect(
host="源數(shù)據(jù)庫地址",
user="用戶名",
password="密碼",
database="源數(shù)據(jù)庫名"
)
source_cursor = source_conn.cursor()
# 連接目標(biāo)數(shù)據(jù)庫
target_conn = pymysql.connect(
host="目標(biāo)數(shù)據(jù)庫地址",
user="用戶名",
password="密碼",
database="目標(biāo)數(shù)據(jù)庫名"
)
target_cursor = target_conn.cursor()
# 查詢?cè)磾?shù)據(jù)庫中的所有表
source_cursor.execute("SHOW TABLES")
tables = source_cursor.fetchall()
for table in tables:
table_name = table[0]
source_cursor.execute(f"SELECT * FROM {table_name}")
rows = source_cursor.fetchall()
source_cursor.execute(f"SHOW CREATE TABLE {table_name}")
create_table_sql = source_cursor.fetchone()[1]
target_cursor.execute(f"DROP TABLE IF EXISTS {table_name}")
target_cursor.execute(create_table_sql)
for row in rows:
placeholders = ", ".join(["%s"] * len(row))
insert_sql = f"INSERT INTO {table_name} VALUES ({placeholders})"
target_cursor.execute(insert_sql, row)
target_conn.commit()
source_cursor.close()
source_conn.close()
target_cursor.close()
target_conn.close()python保存到csv文件
將每個(gè)數(shù)據(jù)表,分別存到csv文件中。注意,該方法目前只保存了數(shù)據(jù),但是沒有保存數(shù)據(jù)表結(jié)構(gòu)與創(chuàng)建語句。
import pymysql
import csv
source_conn = pymysql.connect(
host="源數(shù)據(jù)庫地址",
user="用戶名",
password="密碼",
database="源數(shù)據(jù)庫名"
)
source_cursor = source_conn.cursor()
source_cursor.execute("SHOW TABLES")
tables = source_cursor.fetchall()
for table in tables:
table_name = table[0]
source_cursor.execute(f"SELECT * FROM {table_name}")
rows = source_cursor.fetchall()
columns = [desc[0] for desc in source_cursor.description]
with open(f"{table_name}.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(columns)
writer.writerows(rows)
source_cursor.close()
source_conn.close()到此這篇關(guān)于如何使用python轉(zhuǎn)移mysql數(shù)據(jù)庫中的全部數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python轉(zhuǎn)移mysql數(shù)據(jù)庫數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的descriptor描述器簡(jiǎn)明使用指南
descriptor在Python中主要被用來定義方法和屬性,使用起來相當(dāng)具有技巧性,這里我們先從基礎(chǔ)的開始,整理一份Python中的descriptor描述器簡(jiǎn)明使用指南2016-06-06
Python使用Tkinter打造一個(gè)完整的桌面應(yīng)用
在Python生態(tài)中,Tkinter就像一把瑞士軍刀,它沒有花哨的特效,卻能快速搭建出實(shí)用的圖形界面,作為Python自帶的標(biāo)準(zhǔn)庫,無需安裝即可使用,這種“開箱即用”的特性讓它成為新手入門GUI開發(fā)的首選,本文將通過構(gòu)建一個(gè)完整的記事本應(yīng)用,帶你領(lǐng)略Tkinter的實(shí)用魅力2025-06-06
python flask快速搭建一個(gè)Web應(yīng)用的完整步驟
這篇文章主要介紹了python flask快速搭建一個(gè)Web應(yīng)用的完整步驟,Flask是一個(gè)輕量級(jí)的Python Web框架,適合快速開發(fā)Web應(yīng)用和API,它具有簡(jiǎn)潔的API、靈活性高和豐富的擴(kuò)展,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-05-05
Python中讓MySQL查詢結(jié)果返回字典類型的方法
這篇文章主要介紹了Python中讓MySQL查詢結(jié)果返回字典類型的方法,默認(rèn)情況下Mysql返回的是元組類型,本文實(shí)現(xiàn)了返回字典類型,需要的朋友可以參考下2014-08-08
Python實(shí)現(xiàn)中文數(shù)字與阿拉伯?dāng)?shù)字映射生成器(支持0-9999)的完整代碼
在中文文本處理和自然語言處理(NLP)應(yīng)用中,經(jīng)常需要將中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字,本文將介紹如何使用Python根據(jù)用戶從控制臺(tái)輸入的數(shù)字范圍,生成相應(yīng)的中文數(shù)字到阿拉伯?dāng)?shù)字的映射字典,并將結(jié)果保存為JSON文件,需要的朋友可以參考下2025-07-07
詳解用python -m http.server搭一個(gè)簡(jiǎn)易的本地局域網(wǎng)
這篇文章主要介紹了詳解用python -m http.server搭一個(gè)簡(jiǎn)易的本地局域網(wǎng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python調(diào)用百度OCR實(shí)現(xiàn)圖片文字識(shí)別的示例代碼
這篇文章主要介紹了Python調(diào)用百度OCR實(shí)現(xiàn)圖片文字識(shí)別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

