python3多线程写入mysql_Python3 多线程(连接池)操作MySQL插入数据

本文介绍了如何使用Python3的DBUtils模块和多线程来实现连接池,并通过批量操作高效地将大量数据写入MySQL数据库。通过创建连接池、数据预处理、线程任务和启动多线程的方式,实现了从txt文件读取数据,按10万行分块,最后将数据插入到MySQL的测试表中。实验结果显示,对于不同数量级的数据,这种方法能有效提高数据插入的效率。
摘要由CSDN通过智能技术生成

1.主要模块

DBUtils : 允许在多线程应用和数据库之间连接的模块套件

Threading : 提供多线程功能

2.创建连接池

PooledDB 基本参数:

mincached : 最少的空闲连接数,如果空闲连接数小于这个数,Pool自动创建新连接;

maxcached : 最大的空闲连接数,如果空闲连接数大于这个数,Pool则关闭空闲连接;

maxconnections : 最大的连接数;

blocking : 当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错;

CODE :

def mysql_connection():

maxconnections = 15 # 最大连接数

pool = PooledDB(

pymysql,

maxconnections,

host='localhost',

user='root',

port=3306,

passwd='123456',

db='test_DB',

use_unicode=True)

return pool

# use

>> pool = mysql_connection()

>> con = pool.connection()

3.数据预处理

文件格式:txt

共准备了四份虚拟数据以便测试,分别有10万, 50万, 100万, 500万行数据

MySQL表结构如下图:

a12a5737270ae92010cd6134fc6601ea.png

数据处理思路 :

每一行一条记录,每个字段间用制表符 “\t” 间隔开,字段带有双引号;

读取出来的数据类型是 Bytes ;

最终得到嵌套列表的格式,用于多线程循环每个任务每次处理10万行数据;

格式 : [ [(A,B,C,D), (A,B,C,D),(A,B,C,D),…], [(A,B,C,D), (A,B,C,D),(A,B,C,D),…], [], … ]

CODE :

import re

import time

st = time.time()

with open("10w.txt", "rb") as f:

data = []

for line in f:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值