Python数据库交互问题记录一

1、插入速度缓慢

批量数据的插入,建议不要一行行插入和提交,最好分批(一万行)提交一次。插入的目标表只有24899条数据。
在这里插入图片描述

自动提交

自动提交速度缓慢,一行插入完就提交一次,速度巨慢。

# 部分Python 代码
import time
timeStart= time.time()
for row1 in range(0, len(list)):
    if Check(str(list[row1])) != '0':  # 检核方法
       cursor.execute("INSERT into test_checkresult values('%s','%s','%s','%s','%s','%s')" %
            (table, column, str(list[row1]), '1',
            Check(str(list[row1])),
            datetime.now().strftime("%Y-%m-%d %H:%M")))
    else:
        num += 1
timeEnd = time.time()
messagebox.showinfo('提示', '报告生成成功!' + str(round(timeEnd - timeStart, 2)) + '秒!')

在这里插入图片描述

手动提交

同样的数据量,先把insert语句存入list中,再分批执行提交,速度提升10倍左右(受电脑内存影响)

# 部分Python 代码
# 把插入操作存入一个list批量执行
import time
timeStart= time.time()
CalList = []
for row1 in range(0, len(list)):
    if Check(str(list[row1])) != '0':  # 检核方法
       CalList.append("INSERT into test_checkresult values('%s','%s','%s','%s','%s','%s')" %
            (table, column, str(list[row1]), '1',
            Check(str(list[row1])),
            datetime.now().strftime("%Y-%m-%d %H:%M")))
    else:
       num += 1
cursorTotal = conn.cursor()
rox1 = 0
for rox in range(0, len(CalList)):
    cursorTotal.execute(CalList[rox])
    rox1 += 1
    if rox1 == 10000: # 10000行自动提交
        conn.commit()
        rox1 = 0
    elif rox == len(CalList)-1: # 剩下最后不到10000万的一次提交
        conn.commit()
timeEnd = time.time()
messagebox.showinfo('提示', '报告生成成功!' + str(round(timeEnd - timeStart, 2)) + '秒!')

在这里插入图片描述

2、插入系统时间对比

因项目需求需要同时插入系统时间,有两种方法,一种是Mysql自带的sysdate()函数,另一种是python的datetime.now()
同时写入530365条数据,对比两种语法:

Mysql时间

for row5 in range(0, len(tmpData)):
    if Check(str(tmpData[row1])) != '0':
       CalList.append("INSERT into test_checkresult values('%s','%s','%s','%s','%s',SYSDATE())" %
               (table, column, str(tmpData[row1]), '1',
               Check(str(tmpData[row1])),
               reaList[rCodeList[x4]][row5])))                                    
    else:
       dataNumRight += 1

在这里插入图片描述
Mysql耗时稳定在59秒

Python时间

# 上面代码已经使用了datetime,这里就不再粘贴代码了
from datetime import datetime
print(datetime.now().strftime("%Y-%m-%d %H:%M"))  # 系统时间

在这里插入图片描述
python耗时60秒以上。
综上所述,还是Mysql的耗时稍微小一点。耗时因电脑cpu而异,仅作参考,不吝赐教。如有建议,欢迎讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值