【发布时间】:2019-06-25 07:37:42
【问题描述】:
我有一个有点复杂的 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: table "data" has 2 columns available but 3 columns specified 我经历了多个这个网站上的解决方案,但似乎没有一个对我有用。
有没有办法解决这个问题?
【问题讨论】:
标签: python postgresql psycopg2