获取实际更新为不同值的列?

时间:2017-06-07 10:37:25

标签: python sql postgresql python-3.x psycopg2

我正在运行这样的事情:

cursor.execute(
    '''
    UPDATE my_table
    SET name=%s, about=%s, title=%s
    WHERE id=%s
    ''',
    (name, about, title, id_)
)

保证只更新一行,因为它根据id主键进行更新。

但是,大多数情况下,实际字段中只有一个发生了变化,即abouttitle已更新"它们已经是相同的值,只有name实际上已经改变了。

如何实际更改哪些列?这需要记录每个单独的更改。

1 个答案:

答案 0 :(得分:2)

您可以在更新前选择值,并在最终查询中使用RETURNING *比较值,例如:

t=# create table m1 (i int, e int);
CREATE TABLE
Time: 1.855 ms
t=# insert into m1 select 1,2;
INSERT 0 1
Time: 1.037 ms
t=# begin;
BEGIN
t=# with o as (select * from m1 where i=1)
,u as (update m1 set e=3 where i=1 returning *)
select * from o
join u on o.i = u.i
;
 i | e | i | e
---+---+---+---
 1 | 2 | 1 | 3
(1 row)

所以你可以针对u.e <> o.e或类似的

设置逻辑