Login
网站首页 > 文章中心 > 其它

Python?基于Python从mysql表读取千万数据实践

作者:小编 更新时间:2023-08-09 07:22:26 浏览量:18人看过

基于Python?从mysql表读取千万数据实践

场景:

有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_bar_record表读取1000w条唯一的waybill_no,然后作为INSERT SQL语句的一部分,填充到ts_order_waybill的waybill_no字段中

tl_waybill_bar_record

ts_order_waybill

另外tl_waybill_bar_record表waybill_no有部分重复

Python?基于Python从mysql表读取千万数据实践-图1

实现思路

思路1、利用MySql的LIMIT offset, length分页功能+ORDER BY primary_key按主键排序,循环读取数据,然后解析读取的数据,直到满足条件停止

result = test_platform_db.select_many_record(query)

......(后续处理)

注意:这里如果不适用ORDER BY语句,可能在不同分页取数据时,会取到重复的数据

问题

Python?基于Python从mysql表读取千万数据实践-图2

跑程序的时候,经常会突然"卡死",可能是Python 类库自身原因,也可能是数据库请求过于频繁,这样会导致获取的结果丢失,需要重头开始跑

解决方法:

关键代码

waybill_no_set = set() # 用于存储获取的waybill_no

# 读取上次获取的数据

line = file_handler.readline()

line = line.strip() # 去掉换行符

while line:

waybill_no_set.add(line)

line = line.strip()

# 初始最小主键值

count = len(waybill_no_set) # 初始化以读取的waybill_no总数

result = test_db.select_many_record(query)

if result[0] and result[1]:

for item in result[1]:

waybill_no = item[0]

if waybill_no not in waybill_no_set:

waybill_no_set.add(waybill_no)

Python?基于Python从mysql表读取千万数据实践-图3

min_seq_id = item[1]

count += 1

print(count)

print(min_seq_id) ?# 记录上次读取的"最后位置"

file_handler.write(waybill_no)

file_handler.flush()

①.0000000:

break

# 插入数据

for waybill_no in?waybill_no_set:

time.sleep(0.1)

count = count + 1

print(waybill_no)

以上就是土嘎嘎小编为大家整理的Python?基于Python从mysql表读取千万数据实践相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章