百万条级sql数据库txt数据上传工具
import pymysql
import time
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.font_manager import FontProperties
# 指定字体,例如微软雅黑
font = FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc', size=10)
matplotlib.rcParams['font.family'] = font.get_name()
def insql(v, speeds):
db = pymysql.connect(host='数据库host', port=数据库端口, user='用户名', password='密码', db='数据库')
cursor = db.cursor()
with open('txt文件地址', 'r') as file:
i = 0
x = 0
data_list = []
consecutive_failures = 0 # 记录连续上传成功的次数
while True:
for line in file:
data = line.strip().split(' ')
data_list.append((data[0], data[1]))
i += 1
if i % v == 0:
try:
cursor.executemany("INSERT INTO wbdome(phone,uid) VALUES (%s, %s)", data_list)
db.commit()
print(f"已经上传 {i} 条,错误 {x} 条,当前速度:{v}")
speeds.append(v)
data_list = [] # 插入剩余的数据
consecutive_failures += 1
if consecutive_failures >= 3: # 如果连续成功3次,增加速度
v = int(v * 2)
consecutive_failures = 0 # 重置连续上传成功的次数
except pymysql.Error as e:
print(f"Error while inserting data: {e}")
data_list = [] # 清空出错的数据,避免再次尝试插入出错的数据
x += v
consecutive_failures = 0
if v >10:
v = int(v / 2)
time.sleep(2) # 等待一段时间再重试
db.close()
tu(v)
def tu(speeds):
# 绘制速度变化图
plt.plot(speeds)
plt.xlabel('上传批次')
plt.ylabel('上传速度')
plt.title('sql数据上传速度变化图')
plt.show()
if __name__ == "__main__":
x = 10
speeds = []
while True:
if x < 1:
break
else:
insql(x, speeds)
声明
未经所有者同意,请不要攻击网站。
本人所有文章均为技术分享,均用于防御为目的的记录,所有操作均在实验环境下进行,请勿用于其他用途,否则后果自负。
本博客所有文章除特别声明外,均采用 [BY-NC-SA] 许可协议。转载请注明出处!
文章目录
打赏: 支付宝
本人所有文章均为技术分享,均用于防御为目的的记录,所有操作均在实验环境下进行,请勿用于其他用途,否则后果自负。 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!