使用where语句一次更新具有不同值的多个行

时间:2017-07-12 12:19:09

标签: python sql postgresql

所以我面临以下问题。我正在使用python进行一些计算。这些计算的结果是一系列独特的值。现在我想在不使用循环的情况下将这些值添加到PostgreSQL表中。一个简单的例子:

Python中的计算结果:

[1.2, 2.4, 3.6, 4.8]

PostgreSQL表:

example_table

id | date         | values
-------------------------
 1 | 2016-11-01   | 
 2 | 2016-11-01   | 
 3 | 2016-11-01   | 
 4 | 2016-11-01   | 
 5 | 2017-11-01   | 
 6 | 2017-11-01   | 

我希望实现的是将上述值添加到表格中的“值”列中,日期为“2016-11-01”。数组的长度始终与所选表的长度相同。结果示例:

example_table

id | date         | values
-------------------------
 1 | 2016-11-01   | 1.2
 2 | 2016-11-01   | 2.4
 3 | 2016-11-01   | 3.6
 4 | 2016-11-01   | 4.8
 5 | 2017-11-01   | 
 6 | 2017-11-01   | 

这也适用于这种情况; python数组:

[1.2, 2,4]

然后将上述值添加到表格中的“值”列中,日期为“2017-11-01”。 结果:

example_table

id | date         | values
-------------------------
 1 | 2016-11-01   | 
 2 | 2016-11-01   | 
 3 | 2016-11-01   | 
 4 | 2016-11-01   | 
 5 | 2017-11-01   | 1.2
 6 | 2017-11-01   | 2.4

到目前为止我尝试的是:

INSERT INTO example_table (values) VALUES ('1.2'), ('2.4'), ('3.6'), ('4.8')

哪个有效,但我无法添加WHERE语句,因为INSERT INTO不支持此功能。 使用UPDATE时,我设法将整个数组添加到每一行,或者将第一个值添加到每一行,但不是每行的值数组。我无法将值链接到ID,但值的顺序始终与所选行的顺序相同。

这似乎是一个相当简单和基本的操作,但我没有让它正常工作。如何使用WHERE语句一次将此数组值添加到列?我正在通过Python发送SQL请求。

1 个答案:

答案 0 :(得分:0)

你不能使用带有插入的where子句。

要获得所需结果,您需要使用更新。 a-horse声明了重要的是要知道您的数组是否会保留您在示例中建议的顺序。如果是这样,您可以遍历它并执行更新。类似的东西:

i=1; 
for a in [1.2, 2.4, 3.6, 4.8]:
    UPDATE example_table set values = a where id = i ;
    i += 1;

(原谅我的Python)