最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋

 更新時(shí)間:2024年03月26日 08:36:52   作者:IT小輝同學(xué)  
這篇文章主要為大家詳細(xì)介紹了如何使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下

工具介紹

自動(dòng)化測(cè)試數(shù)據(jù)庫(kù)更新調(diào)度程序

這段 Python 腳本自動(dòng)化了每天定時(shí)從生產(chǎn)數(shù)據(jù)庫(kù)更新測(cè)試數(shù)據(jù)庫(kù)的過(guò)程。它利用了 schedule 庫(kù)來(lái)安排并執(zhí)行每天指定時(shí)間的更新任務(wù)。

特點(diǎn)

  • 自動(dòng)數(shù)據(jù)庫(kù)更新: 腳本自動(dòng)連接到生產(chǎn)數(shù)據(jù)庫(kù),檢索所有表,并將它們的數(shù)據(jù)轉(zhuǎn)移到測(cè)試數(shù)據(jù)庫(kù)。
  • 日志記錄: 實(shí)現(xiàn)了全面的日志記錄,以跟蹤執(zhí)行狀態(tài)和更新過(guò)程中可能發(fā)生的任何錯(cuò)誤。日志存儲(chǔ)在 update_test_db.log 文件中。
  • 批處理處理: 數(shù)據(jù)傳輸分批進(jìn)行,以優(yōu)化性能,確保對(duì)大型數(shù)據(jù)集的高效處理。

如何使用

配置:

prod_db_configtest_db_config 字典中配置生產(chǎn)和測(cè)試數(shù)據(jù)庫(kù)的連接參數(shù),包括用戶名、密碼、IP 地址、數(shù)據(jù)庫(kù)名稱(chēng)和端口。

依賴項(xiàng):

  • 確保已安裝所需的依賴項(xiàng)。如果沒(méi)有,請(qǐng)使用 pip install -r requirements.txt 進(jìn)行安裝。
  • cd ./static
  • pip install .\mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl

日志記錄:

日志寫(xiě)入到 update_test_db.log 文件中。確保腳本對(duì)其所在目錄具有寫(xiě)權(quán)限。

調(diào)度:

更新任務(wù)被安排在每天午夜(00:00)執(zhí)行。您可以通過(guò)修改 schedule.every().day.at("00:00").do(update_test_db) 行來(lái)調(diào)整計(jì)劃。

執(zhí)行:

運(yùn)行腳本。它將每 60 秒檢查一次是否有待處理任務(wù)。

監(jiān)控:

監(jiān)視日志文件 (update_test_db.log),以跟蹤執(zhí)行狀態(tài)和更新過(guò)程中可能遇到的任何潛在錯(cuò)誤。

注意

數(shù)據(jù)完整性:

確保生產(chǎn)數(shù)據(jù)庫(kù)包含必要的數(shù)據(jù),并且測(cè)試數(shù)據(jù)庫(kù)僅用于測(cè)試目的,以避免意外修改。

安全性:

保護(hù)數(shù)據(jù)庫(kù)憑據(jù),并限制對(duì)敏感信息的訪問(wèn)。

錯(cuò)誤處理:

腳本包含了健壯的錯(cuò)誤處理機(jī)制,以捕獲并記錄執(zhí)行過(guò)程中可能出現(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)行而無(wú)需安裝 Python 或其他依賴項(xiàng)。

貢獻(xiàn):

歡迎對(duì)腳本進(jìn)行貢獻(xiàn)和改進(jìn)。請(qǐng)隨時(shí) fork 倉(cāng)庫(kù),進(jìn)行修改,并提交 pull 請(qǐng)求。

關(guān)于:

該腳本旨在簡(jiǎn)化測(cè)試數(shù)據(jù)庫(kù)更新的過(guò)程,促進(jìn)更順暢的開(kāi)發(fā)和測(cè)試工作流程。

核心源碼

import schedule
import time
import pandas as pd
from sqlalchemy import create_engine, text

# 生產(chǎn)數(shù)據(jù)庫(kù)配置
prod_db_config = {
    'username': 'root',
    'password': 'root',
    'ip': '127.0.0.1',
    'database': 'test1',
    'port': 3306
}

# 測(cè)試數(shù)據(jù)庫(kù)配置
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ù)庫(kù)連接字符串
        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ù)庫(kù)引擎
        test_engine = create_engine(test_db_url)

        # 測(cè)試連接是否成功
        with test_engine.connect() as conn:
            conn.execute(text("select 1"))
        print("成功連接到測(cè)試數(shù)據(jù)庫(kù).")

        # 清除測(cè)試數(shù)據(jù)庫(kù)中的所有表
        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ù)庫(kù)中的所有表
        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ù)庫(kù)中獲取表完成.")

            # 將生產(chǎn)數(shù)據(jù)庫(kù)中的所有表數(shù)據(jù)備份到測(cè)試數(shù)據(jù)庫(kù)
            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ù)庫(kù)更新成功.")
    except Exception as e:
        print("更新測(cè)試數(shù)據(jù)庫(kù)時(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ù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)庫(kù)備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

华宁县| 苍南县| 张家港市| 丹寨县| 新泰市| 昌黎县| 崇阳县| 明水县| 西充县| 合作市| 卫辉市| 巴中市| 于田县| 大城县| 乐清市| 安仁县| 简阳市| 防城港市| 丹棱县| 贡觉县| 灵川县| 渝中区| 故城县| 黔东| 乌兰县| 射洪县| 固阳县| 桃园县| 游戏| 清原| 从江县| 象州县| 米泉市| 龙州县| 特克斯县| 成都市| 迁西县| 琼结县| 探索| 周口市| 盐边县|