Python 加快大型mysql更新查询的速度

Python 加快大型mysql更新查询的速度,python,mysql,sql-update,Python,Mysql,Sql Update,我需要更新mysql表中大约250万行。我尝试在for循环中执行此操作,但执行此操作需要几个小时。id列是主键 我怎样才能加快速度 My Python(带数据帧)代码: 谢谢 编辑: 但是,构建此查询字符串仍然需要花费大量时间 有没有办法加速字符串的for循环 我读到: 我是否在实施方法4时犯了错误 另一个问题是:如果查询太大会发生什么 i、 e.phpmyadmin/mysql超时开始生效。?是否有最大行数?在执行查询期间,表中是否可以插入 谢谢通过这种方式,for循环完全消失,并在1秒内运行

我需要更新mysql表中大约250万行。我尝试在for循环中执行此操作,但执行此操作需要几个小时。
id
列是主键

我怎样才能加快速度

My Python(带数据帧)代码:

谢谢

编辑:

但是,构建此查询字符串仍然需要花费大量时间

有没有办法加速字符串的for循环

我读到: 我是否在实施方法4时犯了错误

另一个问题是:如果查询太大会发生什么

i、 e.phpmyadmin/mysql超时开始生效。?是否有最大行数?在执行查询期间,表中是否可以插入


谢谢

通过这种方式,for循环完全消失,并在1秒内运行。尚未测试批量更新执行时间:

dataframe = to_update_rows

s1 = ' when ' +  dataframe['id'].map(str) + ' THEN ' + dataframe['val1'].round(4).map(str) 
s2 = ' when ' +  dataframe['id'].map(str) + ' THEN ' + dataframe['val2'].round(6).map(str)

s1 = " ".join(s1.tolist())
s2 = " ".join(s2.tolist())
s3 = ",".join(map(str, dataframe['id'].tolist()))

query = "UPDATE table SET `val1` = (CASE id %s ELSE `val1` END), `cost` = (CASE id %s ELSE `val2` END) WHERE id IN( %s );" % (s1,s2,s3)
cursor.execute(query)
db.commit()

您应该对此使用sql批量更新,而不是使用sql批量更新loop@Stasel,谢谢你的意见。我更新了问题你能看看我的其他问题吗?
dataframe = to_update_rows

string_list_val1 = []
string_list_val2 = []
id_list = dataframe['id'].tolist()

for i,row in dataframe.iterrows():

    string_list_val1.append('when %d THEN %.4f' % (row['id'], row['val1']))
    string_list_val2.append('when %d THEN %.6f' % (row['id'], row['val2']))

s1 = ' '.join(string_list_val1)
s2 = ' '.join(string_list_val2) 
s3 = ','.join(map(str,id_list))

query = "UPDATE table SET `val1` = (CASE id %s ELSE `val1` END), `val2` = (CASE id %s ELSE `val2` END) WHERE id IN( %s );" % (s1,s2,s3)
cursor.execute(query)
db.commit()
dataframe = to_update_rows

s1 = ' when ' +  dataframe['id'].map(str) + ' THEN ' + dataframe['val1'].round(4).map(str) 
s2 = ' when ' +  dataframe['id'].map(str) + ' THEN ' + dataframe['val2'].round(6).map(str)

s1 = " ".join(s1.tolist())
s2 = " ".join(s2.tolist())
s3 = ",".join(map(str, dataframe['id'].tolist()))

query = "UPDATE table SET `val1` = (CASE id %s ELSE `val1` END), `cost` = (CASE id %s ELSE `val2` END) WHERE id IN( %s );" % (s1,s2,s3)
cursor.execute(query)
db.commit()