使用Python自制數(shù)據(jù)庫備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋
工具介紹
自動(dòng)化測(cè)試數(shù)據(jù)庫更新調(diào)度程序
這段 Python 腳本自動(dòng)化了每天定時(shí)從生產(chǎn)數(shù)據(jù)庫更新測(cè)試數(shù)據(jù)庫的過程。它利用了 schedule
庫來安排并執(zhí)行每天指定時(shí)間的更新任務(wù)。
特點(diǎn)
- 自動(dòng)數(shù)據(jù)庫更新: 腳本自動(dòng)連接到生產(chǎn)數(shù)據(jù)庫,檢索所有表,并將它們的數(shù)據(jù)轉(zhuǎn)移到測(cè)試數(shù)據(jù)庫。
- 日志記錄: 實(shí)現(xiàn)了全面的日志記錄,以跟蹤執(zhí)行狀態(tài)和更新過程中可能發(fā)生的任何錯(cuò)誤。日志存儲(chǔ)在
update_test_db.log
文件中。 - 批處理處理: 數(shù)據(jù)傳輸分批進(jìn)行,以優(yōu)化性能,確保對(duì)大型數(shù)據(jù)集的高效處理。
如何使用
配置:
在 prod_db_config
和 test_db_config
字典中配置生產(chǎn)和測(cè)試數(shù)據(jù)庫的連接參數(shù),包括用戶名、密碼、IP 地址、數(shù)據(jù)庫名稱和端口。
依賴項(xiàng):
- 確保已安裝所需的依賴項(xiàng)。如果沒有,請(qǐng)使用
pip install -r requirements.txt
進(jìn)行安裝。 - cd ./static
- pip install .\mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl
日志記錄:
日志寫入到 update_test_db.log
文件中。確保腳本對(duì)其所在目錄具有寫權(quán)限。
調(diào)度:
更新任務(wù)被安排在每天午夜(00:00)執(zhí)行。您可以通過修改 schedule.every().day.at("00:00").do(update_test_db)
行來調(diào)整計(jì)劃。
執(zhí)行:
運(yùn)行腳本。它將每 60 秒檢查一次是否有待處理任務(wù)。
監(jiān)控:
監(jiān)視日志文件 (update_test_db.log
),以跟蹤執(zhí)行狀態(tài)和更新過程中可能遇到的任何潛在錯(cuò)誤。
注意
數(shù)據(jù)完整性:
確保生產(chǎn)數(shù)據(jù)庫包含必要的數(shù)據(jù),并且測(cè)試數(shù)據(jù)庫僅用于測(cè)試目的,以避免意外修改。
安全性:
保護(hù)數(shù)據(jù)庫憑據(jù),并限制對(duì)敏感信息的訪問。
錯(cuò)誤處理:
腳本包含了健壯的錯(cuò)誤處理機(jī)制,以捕獲并記錄執(zhí)行過程中可能出現(xiàn)的任何異常。
打包應(yīng)用程序
您可以使用 PyInstaller 將腳本打包成一個(gè)可執(zhí)行文件,并且可以指定一個(gè)圖標(biāo)作為應(yīng)用程序的圖標(biāo)。例如,您可以運(yùn)行以下命令:
pyinstaller --onefile --icon=my_icon.ico your_script.py
這將創(chuàng)建一個(gè)獨(dú)立的可執(zhí)行文件,用戶可以直接運(yùn)行而無需安裝 Python 或其他依賴項(xiàng)。
貢獻(xiàn):
歡迎對(duì)腳本進(jìn)行貢獻(xiàn)和改進(jìn)。請(qǐng)隨時(shí) fork 倉庫,進(jìn)行修改,并提交 pull 請(qǐng)求。
關(guān)于:
該腳本旨在簡化測(cè)試數(shù)據(jù)庫更新的過程,促進(jìn)更順暢的開發(fā)和測(cè)試工作流程。
核心源碼
import schedule import time import pandas as pd from sqlalchemy import create_engine, text # 生產(chǎn)數(shù)據(jù)庫配置 prod_db_config = { 'username': 'root', 'password': 'root', 'ip': '127.0.0.1', 'database': 'test1', 'port': 3306 } # 測(cè)試數(shù)據(jù)庫配置 test_db_config = { 'username': 'root', 'password': 'root', 'ip': '127.0.0.1', 'database': 'test2', 'port': 3306 } def update_test_db(): try: # 構(gòu)建測(cè)試數(shù)據(jù)庫連接字符串 test_db_url = f"mysql://{test_db_config['username']}:{test_db_config['password']}@{test_db_config['ip']}:{test_db_config['port']}/{test_db_config['database']}?charset=utf8mb4" # 創(chuàng)建測(cè)試數(shù)據(jù)庫引擎 test_engine = create_engine(test_db_url) # 測(cè)試連接是否成功 with test_engine.connect() as conn: conn.execute(text("select 1")) print("成功連接到測(cè)試數(shù)據(jù)庫.") # 清除測(cè)試數(shù)據(jù)庫中的所有表 with test_engine.connect() as conn: tables = conn.execute("SHOW TABLES").fetchall() if tables: for table in tables: conn.execute(f"DROP TABLE IF EXISTS {table[0]}") # 獲取生產(chǎn)數(shù)據(jù)庫中的所有表 prod_db_url = f"mysql://{prod_db_config['username']}:{prod_db_config['password']}@{prod_db_config['ip']}:{prod_db_config['port']}/{prod_db_config['database']}?charset=utf8mb4" prod_engine = create_engine(prod_db_url) with prod_engine.connect() as prod_conn: tables = prod_conn.execute("SHOW TABLES").fetchall() print("從生產(chǎn)數(shù)據(jù)庫中獲取表完成.") # 將生產(chǎn)數(shù)據(jù)庫中的所有表數(shù)據(jù)備份到測(cè)試數(shù)據(jù)庫 for table in tables: table_name = table[0] print(f"備份表 {table_name} 數(shù)據(jù)...") data = pd.read_sql_table(table_name, prod_conn) data.to_sql(table_name, test_engine, index=False, if_exists='replace') print(f"表 {table_name} 數(shù)據(jù)備份完成.") print("測(cè)試數(shù)據(jù)庫更新成功.") except Exception as e: print("更新測(cè)試數(shù)據(jù)庫時(shí)出錯(cuò):", e) if __name__ == "__main__": # 將任務(wù)調(diào)度在每天特定時(shí)間執(zhí)行 schedule.every().day.at("23:22").do(update_test_db) # 運(yùn)行定時(shí)任務(wù) while True: schedule.run_pending() time.sleep(60)
運(yùn)行效果
1.可直接代碼運(yùn)行
2.可執(zhí)行exe程序
到此這篇關(guān)于使用Python自制數(shù)據(jù)庫備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)庫備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中順序結(jié)構(gòu)和循環(huán)結(jié)構(gòu)示例代碼
這篇文章主要介紹了Python中的條件語句和循環(huán)語句,條件語句用于根據(jù)條件執(zhí)行不同的代碼塊,循環(huán)語句用于重復(fù)執(zhí)行一段代碼,文章還詳細(xì)說明了range函數(shù)的使用和continue與break語句的作用,需要的朋友可以參考下2025-02-02Python實(shí)現(xiàn)批量提取Word中的表格
表格在word文檔中常見的文檔元素之一,操作word文件時(shí)有時(shí)需要提取文件中多個(gè)表格的內(nèi)容到一個(gè)新的文件,本文給大家分享兩種批量提取文檔中表格的兩種方法,希望對(duì)大家有所幫助2024-02-02Python使用CMD模塊更優(yōu)雅的運(yùn)行腳本
這篇文章主要介紹了Python使用CMD模塊更優(yōu)雅的運(yùn)行腳本的方法,實(shí)例分析了Python中cmd模塊的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05python利用urllib和urllib2訪問http的GET/POST詳解
urllib模塊提供的上層接口,使我們可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。下面這篇文章主要給大家介紹了關(guān)于python如何利用urllib和urllib2訪問http的GET/POST的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09Python使用arrow庫優(yōu)雅地處理時(shí)間數(shù)據(jù)詳解
雖然Python提供了多個(gè)內(nèi)置模塊用于操作日期時(shí)間,但有的時(shí)候并不能滿足我們的需求,所以下面這篇文章主要給大家介紹了關(guān)于Python使用arrow庫如何優(yōu)雅地處理時(shí)間數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10python使用Qt界面以及邏輯實(shí)現(xiàn)方法
這篇文章主要介紹了python使用Qt界面以及邏輯實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-0710 行 Python 代碼教你自動(dòng)發(fā)送短信(不想回復(fù)工作郵件妙招)
這篇文章主要介紹了10 行 Python 代碼教你自動(dòng)發(fā)送短信(不想回復(fù)工作郵件妙招),目前在國內(nèi)通過手機(jī)短信保障信息安全是比較常見的,具體實(shí)例代碼大家跟隨小編一起通過本文學(xué)習(xí)吧2018-10-10