簡體   English   中英

我如何使用psycopg2更新PostgreSQL中多行上的多列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM