2024-10-06 17:30:46 发布
网友
我有一组值对[(foo1, bar1), (foo2, bar2), ...],我想对“将'foo'列设置为'foo1',其中'bar'列为'bar1'”进行一系列更新。在
[(foo1, bar1), (foo2, bar2), ...]
我用Python和psycopg2做这个。我可以用查询UPDATE table SET foo = %s WHERE bar = %s来做executemany,但这需要很多小的更新,而且需要很长时间。在
UPDATE table SET foo = %s WHERE bar = %s
executemany
我怎样才能轻松快速地做到这一点?也许是带临时桌子的东西?在
Postgres 9.3版。在
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中的临时表。详细信息:
COPY
UPDATE
或您可以并行传递两个简单数组和unnest(Postgres 9.3的语法):
Postgres 9.4有更好的方法:
仅在值表达式的第一行中需要显式类型转换。^示例中的{}可以是任何内容。后续行中的字符串文本被强制为相同的类型。在
根据键值对的形式,其他方法可能更方便。Like:创建一个临时表,
COPY
,然后像其他任何表一样使用UPDATE
中的临时表。详细信息:或您可以并行传递两个简单数组和unnest(Postgres 9.3的语法):
^{pr2}$Postgres 9.4有更好的方法:
相关问题 更多 >
编程相关推荐