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

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.lryc.cn/news/2391748.html

相关文章:

  • shell之通配符及正则表达式,grep参数
  • RuoYi前后端分离框架集成手机短信验证码(一)之后端篇
  • Knife4j框架的使用
  • 深兰科技陈海波率队考察南京,加速AI医诊大模型区域落地应用
  • 【芯片设计中的交通网络革命:Crossbar与NoC架构的博弈C架构的博弈】
  • deepseek告诉您http与https有何区别?
  • mac将自己网络暴露到公网
  • 考研政治资料分享 百度网盘
  • 拓扑排序算法剖析与py/cpp/Java语言实现
  • 罗马-华为
  • 单例模式的隐秘危机
  • 微信小程序常用方法
  • 切片器导航-大量报告页查看的更好方式
  • 火山引擎声音复刻
  • 【数据分析】Pandas
  • 【ROS2】Qt Debug日志重定向到ROS2日志管理系统中
  • 经典SQL查询问题的练习第一天
  • ubuntu 22.04安装k8s高可用集群
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • 使用LSTM进行时间序列分析
  • 【密码学——基础理论与应用】李子臣编著 第十三章 数字签名 课后习题
  • k8s中kubeSphere的安装使用+阿里云私有镜像仓库配置完整步骤
  • Agilent安捷伦Cary3500 UV vis光谱仪Cary60分光光度计Cary1003004000500060007000 UV visible
  • JSON解析性能优化全攻略:协程调度器选择与线程池饥饿解决方案
  • arcgis js 4.x 的geometryEngine计算距离、面积、缓冲区等报错、失败
  • vSphere 7.0 client 提示HTTP状态 500- 内部服务器错误
  • 用 Python 打造你的专属虚拟试衣间!——AI+AR 如何改变时尚体验
  • Java与Flutter集成开发跨平台应用:从核心概念到生产实践
  • SpringAI 大模型应用开发篇-纯 Prompt 开发(舔狗模拟器)、Function Calling(智能客服)、RAG (知识库 ChatPDF)
  • 微信小程序的软件测试用例编写指南及示例--性能测试用例