gpt4 book ai didi

python - psycopg2 准备删除语句

转载 作者:行者123 更新时间:2023-12-04 15:02:18 25 4
gpt4 key购买 nike

我正在努力生成删除查询,其中查询的参数实际上是一组值。

所以我需要删除参数是一对值的行,例如:

从表中删除 col1 = %s 和 col2 = %s

可以在 Python 中执行,如:

cur = conn.cursor()
cur.execute(query, (col1_value, col2_value))

现在我想运行一个查询:

delete from table where (col1, col2) in ( (col1_value1, col2_value1), (col1_value2, col2_value2) );

我可以生成查询和值并执行准确的 SQL,但我不能完全生成准备好的语句。

我试过:

delete from table where (col1, col2) in %s

delete from table where (col1, col2) in (%s)

但是当我尝试执行时:

cur.execute(query, list_of_col_value_tuples)

cur.execute(query, tuple_of_col_value_tuples)

我收到一个异常,表明 psycopg2 无法将参数转换为字符串。

有什么方法可以使用 psycopg2 来执行这样的查询吗?

最佳答案

您可以动态地将 %s 占位符添加到您的查询中:

cur = con.cursor()

query = "delete from table where (role, username) in (%s)"
options = [('admin', 'foo'), ('user', 'bar')]

placeholders = '%s,' * len(options)
query = query % placeholders[:-1] # remove last comma
print(query)
print(cur.mogrify(query, options).decode('utf-8'))

输出:

delete from table where (role, user) in (%s,%s)
delete from table where (role, user) in (('admin', 'foo'),('user', 'bar'))

或者,使用 psycopg2.sql 构建查询作为回答 there .

关于python - psycopg2 准备删除语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66768703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com