python同步mysql数据

python写了一个简单的mysql数据同步脚本,只作为学习练习,大佬勿喷

python 复制代码
# -*- coding: utf-8 -*-
"""
@Time:2025/5/29 14:38
@Auth:HEhandsome
"""
import pymysql
from pymysql import Connect


class Mysql:
    def __init__(self):
        #源数据库
        self.sou_host = 'sou_host'
        self.sou_user = 'sou_user'
        self.sou_port = 3306
        self.sou_password = 'sou_password'
        self.sou_database = 'sou_database'
        #目标数据库
        self.tag_host = 'tag_host'
        self.tag_user = 'tag_user'
        self.tag_port = 3306
        self.tag_password = 'tag_password'
        self.tag_database = 'tag_database'
        #存储表结构
        self.create_table_sql=None
        self.select_table_sql=None
        self.columns=None

        #连接源数据库和目标数据库
        self.sou_conn=pymysql.Connect(
            host=self.sou_host,
            user=self.sou_user,
            port=self.sou_port,
            password=self.sou_password,
            database=self.sou_database
        )
        self.tag_conn=pymysql.Connect(
                host=self.tag_host,
                user=self.tag_user,
                port=self.tag_port,
                password=self.tag_password,
                database=self.tag_database
        )
    def get_source_db(self):
        try:
            with self.sou_conn.cursor() as cursor:
                #获取表结构
                cursor.execute('SHOW CREATE TABLE users')
                # print(cursor.fetchone())
                result = cursor.fetchone()
                self.create_table_sql = result[1]
        except Exception as e:
            print(f'获取失败:{e}')

    def get_tag_db(self):
        with self.tag_conn.cursor() as cursor:
            cursor.execute('DROP TABLE IF EXISTS users')
            cursor.execute(self.create_table_sql)
            self.tag_conn.commit()

    def read_sou_data(self):
        with self.sou_conn.cursor() as cursor:
            #获取表结构
            cursor.execute('SELECT * FROM users')
            result = cursor.fetchall()
            self.select_table_sql = result
            #获取当前查询结果的所有列名,形成一个列表
            self.columns = [desc[0] for desc in cursor.description]  # 获取列名
    def write_tag_db(self):
        with self.tag_conn.cursor() as cursor:
            # 构建插入语句
            placeholders = ','.join(['%s'] * len(self.columns))
            cols = ','.join(self.columns)
            sql = f"INSERT INTO users ({cols}) VALUES ({placeholders})"
            #插入数据
            cursor.executemany(sql, self.select_table_sql)
            self.tag_conn.commit()
            print(f"成功插入 {cursor.rowcount} 条记录")
if __name__ == '__main__':
    db = Mysql()
    db.get_source_db()
    db.get_tag_db()
    db.read_sou_data()
    db.write_tag_db()
相关推荐
weixin_472339463 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
枯萎穿心攻击4 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue5 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
tan180°6 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
m0_555762906 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
浪裡遊7 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
幽络源小助理7 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
烛阴7 小时前
简单入门Python装饰器
前端·python
lzb_kkk7 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节