Python 批量更新MySQL 42萬條資料

2021-09-14 07:28:37 字數 1865 閱讀 9783

今天在編寫python程式進行資料庫的update操作時,發現更新一條資料大概需要0.5秒

粗略計算一下,更新42萬條大概需要58個小時,因此在執行大資料量更新的時候一條條進行更新基本行不通,除非你非常有耐心。通過查閱資料發現有三種優化方法

對於儲存過程和索引我用的比較少,所以這裡我用了第一種方法。

以表nine_tuple(包含列n_t_id和senti_value)為例,然後需要從文字檔案senti_values.txt中讀取n_t_id和senti_value值,並根據n_t_id來更新senti_value一列的值

表1

mysql批量插入的語法為:

update nine_tuple

set senti_value =

case n_t_id

when

1then 『1.57』

when

2then 『1.3』

when

3then 『1.2』

endwhere 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'

)

mysql 批量更新 MySQL批量更新

我有2個表 mysql data details accounts invoices 理想情況下,每個data details都應具有accounts invoices id.data details有乙個帶有accounts invoices主鍵的外來鍵 由於某種原因,有data details記...

mysql有則更新 批量 mysql 批量更新

private function parseupdate data,field,table sql update set keys array keys current data print r keys die foreach keys as column 如何用一條sql語句實現批量更新?mys...

mysql 批量更新

最近有用到mysql批量更新,使用最原始的批量update發現效能很差,將網上看到的總結一下一共有以下三種辦法 1.批量update,一條記錄update一次,效能很差 update test tbl set dr 2 where id 1 2.replace into 或者insert into ...