亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python-mysqldb - 這樣結構的mysql表,如何快速update

瀏覽:86日期:2022-06-15 14:54:11

問題描述

碰到一個類似這樣的問題,請各位朋友幫助一下。比如我的mysql數據表如下:

idkey1value1key2value2key3value3key4value4 1冬0.138南0.513西0.961北0.756 2南0.962喜0.258北0.625東0.533 3西0.628北0.268東0.156難0.697 4杯0.628東0.894南0.625西0.268 ...........................

還有一個黑名單list:list = [’冬’, ’難’, ’喜’, ’杯’]通過SQL update更新數據,若表中某一條記錄的key*字段的值在黑名單list中,則將其和其對應的value變為Null(注意只是該key和對應的value,不是整個記錄)。比如上述的例子處理后得到:

idkey1value1key2value2key3value3key4value4 1NullNull南0.513西0.961北0.756 2南0.962NullNull北0.625東0.533 3西0.628北0.268東0.156NullNull 4NullNull東0.894南0.625西0.268 ...........................

那么問題來了:假如1.有一百萬條記錄(id:1 ~ 1,000,000)2.有十個key-value對(key1,value1 ~ key10,value10)3.黑名單list有十萬個詞匯如何可以快速的更新整個數據表?

我的笨方法是:

...for key in list: for i in range(1,11):sql = 'UPDATE table_name SET key1=Null, value1=Null WHERE key%d=’%s’' % (i, key)cursor.execute(sql)...

但是這個速度很慢,想請問如何能更快速的更新整個數據表?

問題解答

回答1:

給個我之前提的類似問題鏈接給你,希望能給你點幫助https://segmentfault.com/q/10...

回答2:

黑名單的數據存到數據庫表中,如:表名black_list, 字段名稱為name, 并在name上創建索引

分為十個sql語句執行:update tset key1 = null, value1 = nullwhere exists (select 1 from black_list where name = key1);update tset key2 = null, value2 = nullwhere exists (select 1 from black_list where name = key2);以此類推更新到key10, value10字段。

回答3:

select * from key_value_table;

python-mysqldb - 這樣結構的mysql表,如何快速update

python-mysqldb - 這樣結構的mysql表,如何快速update

1.*

SELECT a.*, CASE NAMEWHEN key1 THEN ’key1’WHEN key2 THEN ’key2’WHEN key3 THEN ’key3’WHEN key4 THEN ’key4’ELSE NULLEND AS key_yws, CASE NAMEWHEN key1 THEN ’value1’WHEN key2 THEN ’value2’WHEN key3 THEN ’value3’WHEN key4 THEN ’value4’ELSE NULLEND AS value_ywsFROM (SELECT a. NAME, b.key1, b.key2, b.key3, b.key4, b.idFROM black_list_table a, key_value_table bWHERE a.`name` = b.key1OR a.`name` = b.key2OR a.`name` = b.key3OR a.`name` = b.key4 ) a

create index idx_key_value_table_key on key_value_table(key1,key2,key3,key4);

python-mysqldb - 這樣結構的mysql表,如何快速update

2.*

CREATE TABLE exec_sql AS SELECT concat(’update key_value_table set ’,key_yws,'=null, ',value_yws,’=null where id=’,id ) AS sql_textFROM (SELECT a.*, CASE NAMEWHEN key1 THEN ’key1’WHEN key2 THEN ’key2’WHEN key3 THEN ’key3’WHEN key4 THEN ’key4’ELSE NULLEND AS key_yws,CASE NAME WHEN key1 THEN’value1’ WHEN key2 THEN’value2’ WHEN key3 THEN’value3’ WHEN key4 THEN’value4’ ELSENULL END AS value_yws FROM( SELECTa. NAME,b.key1,b.key2,b.key3,b.key4,b.id FROMblack_list_table a,key_value_table b WHEREa.`name` = b.key1 OR a.`name` = b.key2 OR a.`name` = b.key3 OR a.`name` = b.key4) a ) tmp2

python-mysqldb - 這樣結構的mysql表,如何快速update

3.*

CREATE PROCEDURE my_procedure ()BEGINDECLARE my_sql VARCHAR (200);DECLARE my_sq2 VARCHAR (200);DECLARE STOP INT DEFAULT 0;DECLARE cur CURSOR FOR (SELECT sql_text FROM exec_sql);DECLARE CONTINUE HANDLER FOR SQLSTATE ’02000’SET STOP = NULL;OPEN cur;FETCH cur INTO my_sql;WHILE (STOP IS NOT NULL) DOSET @my_sq2 = my_sql;PREPARE s1FROM @my_sq2;EXECUTE s1;DEALLOCATE PREPARE s1;FETCH cur INTO my_sql;ENDWHILE;CLOSE cur;END;

4.*

call my_procedure()

5.*

python-mysqldb - 這樣結構的mysql表,如何快速update

標簽: Python 編程
主站蜘蛛池模板: 91久久精一区二区三区大全 | 青青草久热精品视频在线观看 | 丰满的大乳老师三级在线观看 | 欧美性猛交 | 国产三级a三级三级野外 | 国产精品国产三级国产普通话对白 | 国产精品久久久久久免费播放 | 久久成人免费播放网站 | 蕾丝视频在线看片国产 | 性生生活网站免费 | 欧美午夜免费一级毛片 | 亚洲色图欧美一区 | 国产精品大白天新婚身材 | 亚洲已满18点击进入在线观看 | 香蕉超级碰碰碰97视频在线观看 | 精品视频在线观看一区二区三区 | 精品久久国产老人久久综合 | 亚洲操片| 50-60岁老妇女一级毛片 | 久久久久久久久久综合情日本 | 国产精品亚洲欧美一级久久精品 | 精品一区二区久久久久久久网站 | 日本黄色免费看 | 黄色影片免费观看 | 456成人 | 国产1024一区二区你懂的 | 精品免费在线观看 | 1000部末满18在线观看黄 | 日韩国产中文字幕 | 亚洲欧美日韩高清在线看 | 国产免费小视频在线观看 | 午夜成人免费影院 | 日韩不卡中文字幕 | 久久久日本精品一区二区三区 | 国产精品久久国产三级国不卡顿 | 国产视频资源在线观看 | 久久久久国产精品免费免费不卡 | 一区二区在线观看视频 | 久久国产精品永久免费网站 | 欧美人伦禁忌dvd | 亚洲午夜精品一区二区蜜桃 |