广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python如何实现不同数据库间数据同步功能
  • 359
分享到

python如何实现不同数据库间数据同步功能

2023-06-06 13:06:15 359人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了python如何实现不同数据库间数据同步功能,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Python如何实现不同数据库间数据同步功能”这篇文章吧。python是什么意思P

这篇文章主要为大家展示了python如何实现不同数据库间数据同步功能,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Python如何实现不同数据库间数据同步功能”这篇文章吧。

python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

功能描述

数据库间数据同步方式很多,在上篇博文中有总结。本文是用py程序实现数据同步。
A数据库中有几十张表,要汇聚到B数据库中,且表结构一致,需要准实时的进行数据同步,用工具实现时对其控制有限且配置较繁琐,故自写程序,可自由设置同步区间,记录自己想要的日志

代码

本代码实现功能简单,采用面向过程,有需求的同学可以自己优化成面向对象方式,在日志这块缺少数据监控,可根据需求增加。主要注意点:
1、数据抽取时采用区间抽取(按时间区间)、流式游标迭代器+fetchone,避免内存消耗
2、在数据插入时采用executemany(list),加快插入效率

import pymysqlimport osimport datetime,timedef update_time(content):  with open(filepathtime, 'w') as f:    f.writelines(content)def recode_log(content):  with open(filepathlog, 'a') as f:    f.writelines(content)def transferdata():  #1、获取需要抽取的表,抽取数据的时间点  with open(filepathtime, 'r') as f:    lines = f.readlines() # 读取所有数据    print("需要同步的表信息",lines)    for line in lines:      startdatetime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))      tablename_list =line.split(',')      #print(tablename_list)      #print(tablename_list[-1])      tablename_list[-1] = tablename_list[-1].replace('\n','')      #print(tablename_list)      tablename = tablename_list[0]      updatetime = tablename_list[1]      #print(tablename,updatetime)      #2、抽取此表此时间点的数据,同步      updatetime_s = datetime.datetime.strptime(updatetime, '%Y-%m-%d %H:%M:%S')      updatetime_e = (updatetime_s + datetime.timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S")      #print(updatetime_s)      #print(q_sql)      db = pyMysql.connect(host=host_o, port=port_o, user=user_o, passwd=passwd_o, db=db_o)      cursor = db.cursor()      q_sql = "select a,b,c from %s where c >= '%s' " % \          (tablename, updatetime_s)      #2.1 首先判断下原表中是否有待同步数据,若有则同步且更新同步的时间参考点,若没有则不同步且不更新同步的时间参考点      try:        cursor.execute(q_sql)        results = cursor.fetchone()        #print(results) #返回是元组        #print("查询原表数据成功!",tablename)      except BaseException as e:        print("查询原表数据失败!",tablename, str(e))        #记录异常日志        updatetime_n = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))        eachline_log = updatetime_n + '[erro]:' + tablename + str(e) + '\n'        content_log.append(eachline_log)        recode_log(content_log)      db.close()      if results:        print("===============================================================================")        print("有数据可同步",tablename)        db = pymysql.connect(host=host_o, port=port_o, user=user_o, passwd=passwd_o, db=db_o, charset='utf8', cursorclass=pymysql.cursors.SSDictCursor)        cursor = db.cursor()        q_sql1 = "select a,b,c from %s where c >= '%s' and c < '%s' " % \             (tablename, updatetime_s, updatetime_e)        #print(q_sql1)        result_list = []        try:          # startdatetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())          cursor.execute(q_sql1)          #results = cursor.fetchall()          # enddatetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())          # print(results) #返回是元组          #使用流式游标迭代器+fetchone,减少内存消耗          while True:            result = cursor.fetchone()            if not result:              print("此区间无数据", q_sql1)              break            else:              one_list = list(result.values())              # print(result_list)              result_list.append(one_list)          print(result_list) #返回是列表          #print("查询数据成功!", tablename)        except BaseException as e:          print("查询数据失败!", tablename, str(e))          # 记录异常日志          updatetime_n = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))          eachline_log = updatetime_n + '[erro]:' + tablename + str(e) + '\n'          content_log.append(eachline_log)          recode_log(content_log)        db.close()        results_len = (len(result_list))        if results_len>0:          #3、将数据插入到目标表中,利用list提高插入效率          i_sql = "insert into table_t(a,b,c) values (%s,%s,%s)"          #print(i_sql)          db = pymysql.connect(host=host_d, port=port_d, user=user_d, passwd=passwd_d, db=db_d)          cursor = db.cursor()          try:            #startdatetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())            cursor.executemany(i_sql, result_list)            db.commit()            #enddatetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())            print("插入成功!",tablename)          except BaseException as e:            db.rollback()            print("插入失败!", tablename,str(e))            #记录异常日志            updatetime_n = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))            eachline_log = updatetime_n + '[erro]:' + tablename + str(e) + '\n'            content_log.append(eachline_log)            recode_log(content_log)          db.close()        enddatetime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))        #4、如果有数据同步,则更新参考点时间为下一个节点时间        eachline_time = tablename+','+updatetime_e+'\n' #此时间点是下一个时间点updatetime_e        content_time.append(eachline_time)        print("更新表时间点",content_time)        # 5、记录成功日志        eachline_log = enddatetime + '[success]:' + tablename + '开始时间' + startdatetime + \          '结束时间' + enddatetime + ',同步数据量'+str(results_len)+',当前参考点' + updatetime_e + '\n'        content_log.append(eachline_log)        print("日志信息",content_log)        #print("===============================================================================")      else:        print("===============================================================================")        print("无数据可同步",tablename)        #db.close()        enddatetime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))        # 4、如果无数据同步,则参考点时间不更新        eachline_time = tablename + ',' + updatetime + '\n' #此时间点还是原时间updatetime        content_time.append(eachline_time)        print("不更新表时间点",content_time)        # 5、成功日志信息        eachline_log = enddatetime + '[success]:' + tablename + '开始时间' + startdatetime + \          '结束时间' + enddatetime + ',同步数据量0'+ ',当前参考点' + updatetime_e + '\n'        content_log.append(eachline_log)        print("日志信息",content_log)        #print("===============================================================================")    #更新配置文件,记录日志    update_time(content_time)    recode_log(content_log)if __name__ == '__main__':  filepathtime = 'D:/test/table-time.txt'  filepathlog = 'D:/test/table-log.txt'  host_o = 'localhost'  port_o = 3306  user_o = 'root'  passwd_o = 'root@123'  db_o = 'csdn'  host_d = 'localhost'  port_d = 3306  user_d = 'root'  passwd_d = 'root@123'  db_d = 'csdn'  content_time = []  content_log = []  transferdata()  #每5分钟执行一次同步  # while True:  #   transferdata()  #   time.sleep(300)

table-time.txt配置文件,格式说明:
每行包括源库表名、此表的最小时间time,以逗号分隔
若多个表,可配置多个时间
每次脚本执行后,同步更新时间time。时间间隔设置为1小时,可根据情况在updatetime_e中对增量进行修改

table-log.txt
记录每次同步任务执行的结果,或执行中发生异常的日志
此文件需要定期进行清理

以上就是关于“python如何实现不同数据库间数据同步功能”的内容,如果改文章对你有所帮助并觉得写得不错,劳请分享给你的好友一起学习新知识,若想了解更多相关知识内容,请多多关注编程网Python频道。

--结束END--

本文标题: python如何实现不同数据库间数据同步功能

本文链接: https://www.lsjlt.com/news/247244.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python如何实现不同数据库间数据同步功能
    这篇文章主要为大家展示了python如何实现不同数据库间数据同步功能,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“python如何实现不同数据库间数据同步功能”这篇文章吧。python是什么意思P...
    99+
    2023-06-06
  • java不同系统间数据如何同步
    在Java中,不同系统间的数据同步可以通过以下几种方式实现:1. 数据库同步:不同系统可以使用相同的数据库,通过数据库的增、删、改操...
    99+
    2023-09-28
    java
  • 使用datagrip实现不同数据库表之间的结构同步
    datagrip表结构同步 如何把A数据库的结构同步到B数据库 需要将datagrip升级到2022.1及以后版本,可以实现单表的同步 也可以实现数据库所有表的同步 同步单表结构 这里以demo数据库...
    99+
    2023-09-17
    java mysql 数据库
  • 不同云服务器如何实现mysql数据库同步
    下文给大家带来关于不同云服务器如何实现mysql数据库同步,感兴趣的话就一起来看看这篇文章吧,相信看完不同云服务器如何实现mysql数据库同步对大家多少有点帮助吧。目标:A云服务器上自建的数据库同步到B云服...
    99+
    2022-10-18
  • 如何实现MySQL数据库同步
    这篇文章主要介绍了如何实现MySQL数据库同步,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL 的数据同步,在 MySQL 官方网站...
    99+
    2022-10-19
  • 阿里云数据库同步数据轻松实现跨平台数据同步
    随着互联网技术的不断发展,数据的同步需求日益增长。尤其是在跨平台应用开发中,如何实现不同平台之间的数据同步,成为了开发者需要解决的重要问题。本文将介绍阿里云数据库同步数据的相关功能和使用方法,帮助您轻松实现跨平台数据同步。 一、阿里云数据库...
    99+
    2023-11-04
    阿里 轻松 数据同步
  • Mysql数据库中怎么实现数据同步
    Mysql数据库中怎么实现数据同步,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 安装配置两台服务器,分别安装好Mysql,都安装在 /u...
    99+
    2022-10-18
  • MySQL数据库实现主主同步
    前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对...
    99+
    2023-09-08
    mysql 数据库 服务器
  • Python不同数据类型间如何转换
    这篇文章主要介绍了Python不同数据类型间如何转换的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python不同数据类型间如何转换文章都会有所收获,下面我们一起来看看吧。字符串与数字类型的转换什么是类型转换?...
    99+
    2023-06-29
  • 如何进行mysql数据库主从同步中数据库同步配置
    这篇文章给大家介绍如何进行mysql数据库主从同步中数据库同步配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的...
    99+
    2022-10-18
  • Python 容器同步存储:如何实现数据的高效同步?
    在开发过程中,我们经常会遇到需要将数据存储在多个容器中的情况。这就需要实现容器之间的数据同步。Python 提供了许多方法来实现容器之间的数据同步,本文将介绍如何使用这些方法来实现高效的容器同步存储。 使用列表和字典实现容器同步存储 ...
    99+
    2023-07-03
    容器 同步 存储
  • 基于Canal实现MySQL 8.0 数据库数据同步
    前言 服务器说明 主机名称操作系统说明192.168.11.82Ubuntu 22.04主库所在服务器192.168.11.28Oracle Linux Server 8.7从库所在服务器 版本说明 ...
    99+
    2023-10-25
    数据库 mysql 服务器
  • Java实现同步枚举类数据到数据库
    本文实例为大家分享了Java同步枚举类数据到数据库的具体实现代码,供大家参考,具体内容如下 1.需求说明: 我们在开发中常常会用到数据字典,后端程序中也会经常用到(一般是用枚举类来存...
    99+
    2022-11-13
    Java同步枚举类数据到数据库 Java同步枚举类数据 Java同步数据到数据库
  • MySQL同步数据Replication如何实现
    今天小编给大家分享一下MySQL同步数据Replication如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MySQ...
    99+
    2023-07-05
  • Python 实时同步编程算法:如何实现高效的数据同步?
    在当今数据驱动的世界中,数据同步已经成为了一个非常重要的话题。如果你是一名开发人员或者系统管理员,你一定知道数据同步的重要性。数据同步可以确保我们的数据能够在不同的系统之间保持同步,从而确保我们的业务流程顺畅运行。 在本文中,我们将介绍 ...
    99+
    2023-10-21
    实时 同步 编程算法
  • MySQL数据库中怎么实现同步
    本篇文章给大家分享的是有关MySQL数据库中怎么实现同步,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.修改 master 端的my.c...
    99+
    2022-10-18
  • Win系统下MYSQL主从数据库同步设置实现数据同步更新
    这篇文章主要讲解了“Win系统下MYSQL主从数据库同步设置实现数据同步更新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Win系统下MYSQL主从数据库同...
    99+
    2022-10-18
  • MySQL数据库中怎么实现异构数据同步
    本篇文章为大家展示了MySQL数据库中怎么实现异构数据同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在实现levelDB挂载成MySQL引擎时,发现在实际存储是...
    99+
    2022-10-18
  • mysql数据不同步如何解决
    mysql数据不同步的解决方法首先,对数据进行锁表,防止数据写入;flush tables with read lock; 对数据进行备份;mysqldump -uroot -p123456 --all-databases > /tmp/m...
    99+
    2022-10-06
  • Canal中怎么实现MySQL数据库实时数据同步
    这期内容当中小编将会给大家带来有关Canal中怎么实现MySQL数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 canal介绍Canal是一个基于...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作