首页 > 编程语言 >使用python进行数据同步,根据游标的方式

使用python进行数据同步,根据游标的方式

时间:2023-09-14 10:45:38浏览次数:30  
标签:同步 target python 游标 查询 cursor source id

使用python进行数据同步,根据游标的方式

一、介绍: 数据同步分为好几种,比如根据最大id排序,其次才是根据游标进行排序。

为什么不使用最大id进行数据同步?

如下:

因为如果数据表中的数据是按照降序排序的,那么每次根据最大id取1000条数据的方式也是一种可行的分页查询方式。这种方式的优点是简单易用,不需要使用游,也不需要跳过前面的数据,因此查询效率较高。

但是,这种方式也存在一些问题。首先,如果数据表中的数据不是按照降序排序的,那么每次查询时需要重新排序,会影响查询效率。其次,如果数据表中的数据发生变化,比如有新的数据插入,那么每次查询时需要重新计算最大id,也会影响查询效率。

相比之,基于游标的分页查询方式更加灵活和高效。使用游标可以避免每次查询时重新排序的问题,同时也可以避免数据变化对查询结果的影响。此外,基于游标的分页查询方式还可以支持更多的查询条件,比如根据时间范围、关键字等条件进行查询。

因此,如果数据表中的数据量较大,或者需要支持更多的查询条件,建议使用基于游标的分页查询方式。

 

import pyodbc
import uuid

#接源数据库
source_conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=source_db;UID=username;PWD=password')
source_cursor = source_conn.cursor()

# 连接目标数据库
target_conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=target_db;UID=username;PWD=password')
target_cursor = target_conn.cursor()

# 执行查询
source_cursor.execute('SELECT * FROM source_table ORDER BY id')
while True:
    # 获取若干条数据
    rows = source_cursor.fetchmany(1000)
    if not rows:
        break

    # 批量写入目标表数据
    target_rows = []
    for row in rows:
        # 生成唯一标识符
        id uuid.uuid1().hex

        # 构造插入数据
        target_row = (id, row.col1, row.col2, row.col3)
        target_rows.append(target_row)

    # 执行批量插入
    target_cursor.executemany('INSERT INTO target_table (id, col1, col2, col3) VALUES (?, ?, ?, ?)', target_rows)

    # 提交事务
    target_conn.commit()

# 关闭连接
source_cursor.close()
source_conn.close()
target_cursor.close()
target_conn.close()

谢谢学习!!!

 

标签:同步,target,python,游标,查询,cursor,source,id
From: https://www.cnblogs.com/wangjinya/p/17701845.html

相关文章

  • 使用pyinstaller和electron将python打包为桌面端应用,无法在win7上执行
    在win10或win11上开发的软件,直接在win7上运行,可能导致下面的问题(python3.11electron23.*)(python3.7electron23.*) 原因在于:win10或win11上的开发环境(如python版本,electron版本)过高,win7不支持该环境。解决办法:降低python版本和electron版本,如:win7支持的python3.7和electron1......
  • 使用pyinstaller打包python(anaconda虚拟环境),生成exe文件过大,改用pipenv创建虚拟环境
    pipenv创建虚拟环境时,创建的python环境必须和本机python版本一致。因为本机的python是anaconda默认的python3.11,所以需要先激活conda下的win7py的虚拟环境。接下来才能使用pipenv–python3.7创建python3.7虚拟环境。 激活虚拟环境pipenvshell 根据项目依赖环境下载相应......
  • 记录一个python多线程的错误写法
    直接先上错误代码:importmultiprocessingdeffirst_way():init=3defprocess_function(item):result=item*initreturnresultdata=[1,2,3,4,5,6,7,8,9,10]pool=multiprocessing.Pool(processes=4)#创建一个......
  • glob:Python中文件名的匹配
    前言既然在Pathlib库中提到了glob()函数,那么我们就专门用一篇内容讲解文件名的匹配。其实我们有专门的一个文件名匹配库就叫:glob。不过,glob库的API非常小,但是仅仅应用于文件名的匹配绰绰有余。只要是在实际的项目中需要过滤,或者匹配一组文件,都可以使用该库进行操作。通配符星......
  • Python采集知网
    Python爬虫初探selenium+beautifulsoup4+chromedriver安装模块:*importpymssql*pipinstallbs4*pipinstallselenium*pipinstallpd*pipinstallpandas*pipinstallPyQt5安装浏览器驱动:你自己电脑上装了什么浏览器,就下载对应的驱动程序即可,本文使用的是Google,所......
  • notepad运行python代码的步骤
    notepad运行python代码的步骤:1、用notepad++打开python文件。或者新建文件,保存为.py格式。2、在菜单栏上面有一个运行,我们点击运行->运行,或者使用快捷键F5。3、点击运行菜单后会弹出notepad++中的运行窗口,不是系统自带的cmd运行窗口。输入运行程序名的输入框填写内容为:cmd/k......
  • python:可变类型与不可变类型
    python:可变类型与不可变类型一、引用变量与变量在存储的存储形式在python有个id()方法,可以获取某个变量指向的内存地址num1=10#num1实际储存在栈内存中,当调用num1时通过内存地址引用储存在数据区中的10#如果把num1的值赋予num2,两者是什么关系呢num2=num1print(num......
  • Python基于License的项目授权机制
    1需求说明当项目平台被首次部署在服务器上时,系统是没有被授权的。当客户希望将平台部署到某一台特定的服务器进行使用时,需要提供该服务器的MAC地址,以及授权到期时间,请求获取授权码,收到授权码后,就能正常使用迁移平台。授权方收到授权请求时,获得平台安装的目标服务器的MAC地址......
  • Python学习笔记-Python函数进阶
    函数多返回值思考如果一个函数有两个return,程序如何执行?例如:defreturn_num():return1return2result=return_num()print(result)上面代码只执行了第一个return,因为retrun可以退出当前函数,导致return下方的代码不执行。多个返回值如果一个函数要有多个返回值,书写方式示......
  • python
    Day01计算机基础和环境搭建课程概要计算机基础编程本质Python的介绍Python环境的搭建计算机基础1.1基本概念计算机的组成计算机是由多个硬件组合而成,常见的硬件有CPU,硬盘,内存,网卡,显示器,机箱,电源...注意事项:机械将零件组合到一起,他们是无法进行协作的操作系统......