2017-07-12 25 views
0

所以我面臨以下問題。我使用Python來做一些計算。這些計算的結果是一系列獨特的值。現在我想在不使用循環的情況下將這些值添加到PostgreSQL表中。一個簡單的例子:使用where語句一次更新具有不同值的多行

在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月1日」。 結果:

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請求。

+0

是否'id'總是反映在數組中值的位置? –

+1

您是否嘗試將數據(id和日期)從SQL移動到python,將它加入到那裏,然後在SQL中將它作爲新表插入? – WJS

+0

確實可以是一個解決方案,但我需要只將值添加到現有的表,而不更改其他任何東西。 – cf2

回答

0

你不能有一個插入的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)

+0

只有當數值與ID的順序相同時,才能工作,但並非總是如此,例如,當我想添加[1.2,2.4] WHERE date ='2017-11-01' – cf2

+0

您的數據在環境之間不一致。它可能更好地處理這一切在Python然後轉移到Postgres。 – Mokadillion