我有大约450,000个条目的词典,如下:
{'id1': 123, 'id2': 234, ..., 'id3': 567}
对于字典中的每一行,我需要在postgres DB中执行更新。为了执行一行,我的sql语句如下所示:
UPDATE employee.ids set "idNr" = <val> where "id" LIKE '%<id>%';
我的问题是找到一种有效的方法来做到这一点。执行450 000个单个查询可能需要永远,所以有没有办法有效地执行此操作?
答案 0 :(得分:1)
由于PostgreSQL可以从版本9.3处理json,如果您使用的是该版本或更新版本,您可以使用单个查询更新值,将字典作为json参数传递。
查询应如下所示:
<div class="main_box">
<div class="flexbox_images">
<a href="">
<div class="image_background image_background_left">
<div class="fleximagebox_link">Buy
<div class="main_black_bar"> </div>
</div>
</div>
</a>
<a href="">
<div class="image_background image_background_right">
<div class="fleximagebox_link">
<div class="main_black_bar"> </div>Sell</div>
</div>
</a>
</div>
</div>
我认为这种方法会快得多。从版本9.4开始,jsonb也受支持。这可能会快一点,但我认为它不会产生太大的影响。 使用jsonb的查询如下所示:
update employee e set idnr = a.value::text::int8
from
json_each('{"id1": 123, "id2": 234, "id3": 567}'::json) a
where a.key = e.id