![](/img/trans.png)
[英]How can I update rows obtained by a SELECT query in PostgreSQL with Python? Python 2.7 psycopg2
[英]How can I update multiple columns on multiple rows in postgresql using psycopg2
我有一個稍微復雜的sql查詢,該查詢應更新表中多個行上的多個列。 我試圖將多個參數傳遞給查詢,並且還會循環通過psycopg2更新數據,但是我不知道該怎么做。
這是我要遍歷的示例數據。
data = [(214, 'Feb', 545), (215, 'March', 466)]
到目前為止,這里是我有的SQL查詢
query = """
UPDATE table_1
SET
date_from =
(CASE version
WHEN 1 THEN '1900-01-01' ELSE
( SELECT date_to
FROM table_1
WHERE month = data.month
AND cust_key = data.cust_key
AND prod_key = data.prod_key
AND version = (
SELECT version-1
FROM table_1
WHERE month = data.month
AND cust_key = data.cust_key
AND prod_key = data.prod_key
ORDER BY version DESC LIMIT 1)
)
END),
date_to = current_date
FROM (VALUES %s) AS data(cust_key, month, prod_key)
WHERE month = data.month
AND cust_key = data.cust_key
AND prod_key = data.prod_key
"""
這是我傳遞參數的方式
WHERE month = data.month
AND cust_key = data.cust_key
AND prod_key = data.prod_key
FROM (VALUES %s) AS data(cust_key, month, prod_key)
這就是我執行查詢的方式
cursor = db.cursor()
execute_values(cursor, query, (data,))
db.commit()
return True
當我執行查詢時,出現此錯誤psycopg2.errors.InvalidColumnReference:表“數據”有2列可用,但指定了3列我已經在該站點上經歷了多種解決方案,但似乎沒有一個適合我。
有沒有解決的辦法?
您的data
已經采用psycopg2.extras.execute_values
期望的格式。
因此,不要將其轉換為另一個元組,只需執行
execute_values(cursor, query, data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.