cursor.execute('UPDATE emp SET name = %(name)s',{"name": name} where ?)
我不明白如何获取特定记录的主键。 我在DB中有一些N条记录。我想访问那些记录& 操纵。 通过SELECT查询我得到了所有记录,但我想相应地更新所有这些记录 有人可以伸出援助之手吗? 在此先感谢!
表格结构:
ID CustomerName ContactName
1 Alfreds Futterkiste
2 Ana Trujillo
此处ID由postgres中的系统自动生成。 我正在访问两个记录和&的客户名称更新。所以我在这里更新 那些记录最后更新的记录也在第一条记录中被覆盖。
这里我想设置一些条件,以便在根据我的记录执行更新查询时。
表结构后:
ID CustomerName ContactName
1 xyz Futterkiste
2 xyz Trujillo
这里我想将第一条记录设为'abc'第二条记录为'xyz'
注意:它将使用PK完成。但我不知道如何获得PK
答案 0 :(得分:1)
您的意思是您希望将UPDATE
SQL命令与WHERE
语句一起使用:
cursor.execute("UPDATE emp SET CustomerName='abc' WHERE ID=1")
cursor.execute("UPDATE emp SET CustomerName='xyz' WHERE ID=2")
这样您将UPDATE
具有特定ID的行。
答案 1 :(得分:0)
也许你不会喜欢这个,但你不应该使用自动生成的密钥。唯一的例外是当你想要插入一些行而不对它们做任何其他事情时。正确的解决方案是:
select nextval('generator_name')
)。这样,您就可以在创建行之前知道ID。有关更新:
现在,当您需要更新行(例如:客户)时,您应该已经知道需要修改哪个客户。由于所有记录都由主键ID标识,因此您应该已经知道该行的ID。如果你不知道它,但是你在一组字段上有一个唯一的索引,那么你可以尝试获取id。例如:
select id from emp where CustomerName='abc' -- but only if you have a unique constraing on CustomerName!
通常,如果要更新单行,则不应以这种方式更新:
update emp set CustomerName='newname' where CustomerName='abc'
即使您对CustomerName
有唯一约束。解释并不容易,不适合这里。但请想一想:您可能在事务块中发送更改,并且可能同时有许多已打开的事务...
当然,如果您打算更新满足条件的所有行,则可以更新行。