2014-02-12 86 views
0

我有一個python字典「persons」填充了對PostgreSQL的查詢。我做了一些不需要與數據庫交互的處理。所以代碼去python批量更新表

for person in persons: 
    process 

基於過程的成功/失敗,我會爲字典中的每個記錄設置一個標誌。一旦過程結束,我想用字典中的數據更新表格。有沒有可能做到這一點沒有循環/迭代?現在我正在循環內進行更新。當列表很大時,涉及太多的數據庫調用。

+0

您可以連接SQL'UPDATE'並在整個查詢形成後運行它們。也就是說,在每個'process'中將'UPDATE table SET col = val,... WHERE condition'連接成一個你將用來運行SQL命令的字符串。 – linkyndy

+0

這是我正在探索的選項。有沒有更簡單的方法 - 比如「更新表x集y = 0,其中id在(persons.id)」中。可能是一廂情願 – Jayadevan

+1

你可以**在WHERE子句中使用'IN'運算符,但我認爲不可能爲修改的列設置_different_值。如果你想用所有請求行的相同值更新所需的列,它將會工作。 – linkyndy

回答

0

,如果你能複合查詢到一個大的查詢字符串,例如:

sql = """ 
    BEGIN; 
    UPDATE table SET field = value1 WHERE id = 1; 
    UPDATE table SET field = value2 WHERE id = 2; 
    ... 
    UPDATE table SET field = valueN WHERE id = N; 
    END; 
""" 

您將能夠執行一個交易查詢生成多個UPDATE查詢。