python脚本实现批量更新MYSQL 42万条数据

0 / 160

MySQL 批量插入的语法为:

UPDATE nine_tuple
    SET SENTI_VALUE = CASE N_T_ID 
        WHEN 1 THEN 1.57 
        WHEN 2 THEN 1.3 
        WHEN 3 THEN 1.2 
    END
WHERE N_T_ID IN (1,2,3)

主要思想:将 42W 条数据分批次进行更新,我这里分 42 次,即每次批量更新 1 万条,然后编写 Python 程序按上面的语法格式构建相应的 SQL 语句,代码如下:

f=open("senti_values.txt",'r',encoding='utf8')
    res=f.readlines()
    for i in range(0,42):
        sql1 = "UPDATE nine_tuple SET SENTI_VALUE = CASE N_T_ID "
        sql2 = '1'
        for j in range(j*10000, (j+1)*10000):
            r = res[j].split('\n')[0].split(';')
            ntid = int(r[0])
            f_senti_sala = float(r[1])
            senti_sala = str(float('%.3f' % f_senti_sala))
            sql1 += ' WHEN %d THEN \'%s\'' % (ntid, senti_sala)
            if (i != 0):
                sql2 += ',' + str(ntid)
        sql = sql1 + ' END' + " WHERE N_T_ID IN (%s)" % (sql2)
        print(str(i + 1))
        cursor.execute(sql)
        db.commit()
    db.close()
    print('OK')

最终执行完只用了 47 秒左右。