批量更新带有variab的WHERE子句的表

2024-10-06 17:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组值对[(foo1, bar1), (foo2, bar2), ...],我想对“将'foo'列设置为'foo1',其中'bar'列为'bar1'”进行一系列更新。在

我用Python和psycopg2做这个。我可以用查询UPDATE table SET foo = %s WHERE bar = %s来做executemany,但这需要很多小的更新,而且需要很长时间。在

我怎样才能轻松快速地做到这一点?也许是带临时桌子的东西?在

Postgres 9.3版。在


Tags: footablebarupdatepostgreswherepsycopg2set
1条回答
网友
1楼 · 发布于 2024-10-06 17:30:46
UPDATE tbl t 
SET    foo = v.foo
FROM  (
   VALUES ('foo1'::text, 'bar1'::text), ('foo2', 'bar2'), ...
   ) v(foo, bar)
WHERE t.bar = v.bar;

仅在值表达式的第一行中需要显式类型转换。^示例中的{}可以是任何内容。后续行中的字符串文本被强制为相同的类型。在

根据键值对的形式,其他方法可能更方便。Like:创建一个临时表,COPY,然后像其他任何表一样使用UPDATE中的临时表。详细信息:

您可以并行传递两个简单数组和unnest(Postgres 9.3的语法):

^{pr2}$

Postgres 9.4有更好的方法:

相关问题 更多 >