当前位置: 首页 > java >正文

python同步mysql数据

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

# -*- coding: utf-8 -*-
"""
@Time:2025/5/29 14:38
@Auth:HEhandsome
"""
import pymysql
from pymysql import Connectclass Mysql:def __init__(self):#源数据库self.sou_host = 'sou_host'self.sou_user = 'sou_user'self.sou_port = 3306self.sou_password = 'sou_password'self.sou_database = 'sou_database'#目标数据库self.tag_host = 'tag_host'self.tag_user = 'tag_user'self.tag_port = 3306self.tag_password = 'tag_password'self.tag_database = 'tag_database'#存储表结构self.create_table_sql=Noneself.select_table_sql=Noneself.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()

http://www.xdnf.cn/news/9739.html

相关文章:

  • WPS 免登录解锁编辑
  • 安全访问 std::tuple 的容错方法及气象领域应用
  • R3GAN利用配置好的Pytorch训练自己的数据集
  • Vue-Router中的三种路由历史模式详解
  • MCP入门实战(极简案例)
  • eNSP企业综合网络设计拓扑图
  • linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)
  • 挖洞日记 | Js中的奇妙旅行
  • AXI 协议补充(二)
  • 从本地到云端:Code App+SSH协议在iPad开发中的性能优化实战
  • VLC-QT 网页播放RTSP
  • 6个月Python学习计划 Day 8 - Python 函数基础
  • 闲鱼到淘宝商品同步的技术实现原理与局限
  • Linux基础开发工具
  • SCL语言两台电机正反转控制程序从选型、安装到调试全过程的详细步骤指南(下)
  • unity编辑器扩展dll形式展示
  • 在supermap idesktop中两块影像设置背景透明后,拼接处会有一条明显的黑线,但是放大后又没有,这个怎么处理
  • Java 对接 Office 365 邮箱全攻略:OAuth2 认证 + JDK8 兼容 + Spring Boot 集成(2025 版)
  • 局域网内文件共享的实用软件推荐
  • 利用海外代理IP,做Twitter2026年全球趋势数据分析
  • Spring AI MCP的几个小问题
  • jar包同目录生成文件
  • Linux环境下多进程Socket通信实现
  • 前端面试核心考点全解析
  • Learning Discriminative Data Fitting Functions for Blind Image Deblurring论文阅读
  • C语言编程--20.合并K个升序列表
  • MFC坦克大战游戏制作
  • 禾纳ATE3156AP/ATE3156AS,P沟道增强型MOSFET,替代AO4805方案
  • 数据可视化的定义和类型
  • 基于多尺度卷积和扩张卷积-LSTM的多变量时间序列预测