使用Python自制数据库备份工具实现数据定时覆盖

 更新时间:2024年03月26日 08:36:52   作者:IT小辉同学  
这篇文章主要为大家详细介绍了如何使用Python自制数据库备份工具实现数据定时覆盖功能,文中的示例代码讲解详细,需要的小伙伴可以参考下

工具介绍

自动化测试数据库更新调度程序

这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务。

特点

  • 自动数据库更新: 脚本自动连接到生产数据库,检索所有表,并将它们的数据转移到测试数据库。
  • 日志记录: 实现了全面的日志记录,以跟踪执行状态和更新过程中可能发生的任何错误。日志存储在 update_test_db.log 文件中。
  • 批处理处理: 数据传输分批进行,以优化性能,确保对大型数据集的高效处理。

如何使用

配置:

prod_db_configtest_db_config 字典中配置生产和测试数据库的连接参数,包括用户名、密码、IP 地址、数据库名称和端口。

依赖项:

  • 确保已安装所需的依赖项。如果没有,请使用 pip install -r requirements.txt 进行安装。
  • cd ./static
  • pip install .\mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl

日志记录:

日志写入到 update_test_db.log 文件中。确保脚本对其所在目录具有写权限。

调度:

更新任务被安排在每天午夜(00:00)执行。您可以通过修改 schedule.every().day.at("00:00").do(update_test_db) 行来调整计划。

执行:

运行脚本。它将每 60 秒检查一次是否有待处理任务。

监控:

监视日志文件 (update_test_db.log),以跟踪执行状态和更新过程中可能遇到的任何潜在错误。

注意

数据完整性:

确保生产数据库包含必要的数据,并且测试数据库仅用于测试目的,以避免意外修改。

安全性:

保护数据库凭据,并限制对敏感信息的访问。

错误处理:

脚本包含了健壮的错误处理机制,以捕获并记录执行过程中可能出现的任何异常。

打包应用程序

您可以使用 PyInstaller 将脚本打包成一个可执行文件,并且可以指定一个图标作为应用程序的图标。例如,您可以运行以下命令:

pyinstaller --onefile --icon=my_icon.ico your_script.py

这将创建一个独立的可执行文件,用户可以直接运行而无需安装 Python 或其他依赖项。

贡献:

欢迎对脚本进行贡献和改进。请随时 fork 仓库,进行修改,并提交 pull 请求。

关于:

该脚本旨在简化测试数据库更新的过程,促进更顺畅的开发和测试工作流程。

核心源码

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

# 生产数据库配置
prod_db_config = {
    'username': 'root',
    'password': 'root',
    'ip': '127.0.0.1',
    'database': 'test1',
    'port': 3306
}

# 测试数据库配置
test_db_config = {
    'username': 'root',
    'password': 'root',
    'ip': '127.0.0.1',
    'database': 'test2',
    'port': 3306
}


def update_test_db():
    try:
        # 构建测试数据库连接字符串
        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"

        # 创建测试数据库引擎
        test_engine = create_engine(test_db_url)

        # 测试连接是否成功
        with test_engine.connect() as conn:
            conn.execute(text("select 1"))
        print("成功连接到测试数据库.")

        # 清除测试数据库中的所有表
        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]}")

        # 获取生产数据库中的所有表
        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("从生产数据库中获取表完成.")

            # 将生产数据库中的所有表数据备份到测试数据库
            for table in tables:
                table_name = table[0]
                print(f"备份表 {table_name} 数据...")
                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} 数据备份完成.")

        print("测试数据库更新成功.")
    except Exception as e:
        print("更新测试数据库时出错:", e)

if __name__ == "__main__":
    # 将任务调度在每天特定时间执行
    schedule.every().day.at("23:22").do(update_test_db)

    # 运行定时任务
    while True:
        schedule.run_pending()
        time.sleep(60)

运行效果

1.可直接代码运行

2.可执行exe程序

到此这篇关于使用Python自制数据库备份工具实现数据定时覆盖的文章就介绍到这了,更多相关Python数据库备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中顺序结构和循环结构示例代码

    Python中顺序结构和循环结构示例代码

    这篇文章主要介绍了Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使用和continue与break语句的作用,需要的朋友可以参考下
    2025-02-02
  • python删除特定文件的方法

    python删除特定文件的方法

    这篇文章主要介绍了python删除特定文件的方法,涉及Python文件查找及删除的相关技巧,需要的朋友可以参考下
    2015-07-07
  • python中for用来遍历range函数的方法

    python中for用来遍历range函数的方法

    今天小编就为大家分享一篇python中for用来遍历range函数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现批量提取Word中的表格

    Python实现批量提取Word中的表格

    表格在word文档中常见的文档元素之一,操作word文件时有时需要提取文件中多个表格的内容到一个新的文件,本文给大家分享两种批量提取文档中表格的两种方法,希望对大家有所帮助
    2024-02-02
  • Python使用CMD模块更优雅的运行脚本

    Python使用CMD模块更优雅的运行脚本

    这篇文章主要介绍了Python使用CMD模块更优雅的运行脚本的方法,实例分析了Python中cmd模块的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • 一文解决django 2.2与mysql兼容性问题

    一文解决django 2.2与mysql兼容性问题

    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。这篇文章主要介绍了解决django 2.2与mysql兼容性问题,需要的朋友可以参考下
    2020-07-07
  • python利用urllib和urllib2访问http的GET/POST详解

    python利用urllib和urllib2访问http的GET/POST详解

    urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据。下面这篇文章主要给大家介绍了关于python如何利用urllib和urllib2访问http的GET/POST的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Python使用arrow库优雅地处理时间数据详解

    Python使用arrow库优雅地处理时间数据详解

    虽然Python提供了多个内置模块用于操作日期时间,但有的时候并不能满足我们的需求,所以下面这篇文章主要给大家介绍了关于Python使用arrow库如何优雅地处理时间数据的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • python使用Qt界面以及逻辑实现方法

    python使用Qt界面以及逻辑实现方法

    这篇文章主要介绍了python使用Qt界面以及逻辑实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)

    10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)

    这篇文章主要介绍了10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招),目前在国内通过手机短信保障信息安全是比较常见的,具体实例代码大家跟随小编一起通过本文学习吧
    2018-10-10

最新评论