Postgres:使用python

时间:2015-11-26 06:09:44

标签: python postgresql

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

2 个答案:

答案 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)

也许你不会喜欢这个,但你不应该使用自动生成的密钥。唯一的例外是当你想要插入一些行而不对它们做任何其他事情时。正确的解决方案是:

有关更新:

  • 您可以在已知唯一的coulmns上创建唯一约束(或唯一索引)
  • 但是你应该在内部识别带有标识符的行。
  • 在引用其他表中的记录时,请使用标识符,并创建外键约束。 (并非总是如此,但通常这是一种很好的做法。)

现在,当您需要更新行(例如:客户)时,您应该已经知道需要修改哪个客户。由于所有记录都由主键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有唯一约束。解释并不容易,不适合这里。但请想一想:您可能在事务块中发送更改,并且可能同时有许多已打开的事务...

当然,如果您打算更新满足条件的所有行,则可以更新行。