【问题标题】:Update multiple rows with different values at once using a where statement使用 where 语句一次更新具有不同值的多行
【发布时间】:2017-07-12 21:00:43
【问题描述】:

所以我面临以下问题。我正在使用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   | 

这也应该适用于这种情况; 蟒蛇数组:

[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 请求。

【问题讨论】:

  • id 是否总是反映值在数组中的位置?
  • 您是否尝试过将数据(id 和日期)从 SQL 移动到 python,在那里加入,然后将其作为新表插入到 SQL 中?
  • 确实是一个解决方案,但我只需要将值添加到现有表中,而无需更改任何其他内容。

标签: python sql postgresql


【解决方案1】:

不能有带插入的 where 子句。

要获得所需的结果,您需要使用更新。一匹马表示重要的是要知道您的阵列是否会保持您在示例中建议的顺序。如果是这样,您可以遍历它并执行更新。类似的东西:

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)

【讨论】:

  • 这仅在值与 ID 的顺序相同时才有效,但情况并非总是如此,例如当我想添加 [1.2, 2.4] WHERE date = '2017- 11-01'
  • 您的数据在环境之间不一致。在 Python 中处理这一切然后转移到 Postgres 可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多