在psycopg2中将参数列表传递给SQL

问题描述 投票:34回答:1

我有一个从数据库中获取的行ID列表。我正在使用python和psycopg2,我的问题是如何有效地将这些ID传递给SQL?我的意思是,如果我知道该列表的长度,这很容易,因为我总是可以根据需要手动或自动将多个“%s”表达式添加到查询字符串中,但在这里我不知道我需要多少它们。重要的是我需要使用sql“id IN(id1,id2,...)”语句选择行。我知道可以检查列表的长度并将合适数量的“%s”连接到查询字符串中,但我担心它会非常缓慢和丑陋。有没有人知道如何解决它?请不要问为什么我需要用“IN”语句来做 - 这是一个基准测试,是我课堂作业的一部分。提前致谢!

python postgresql psycopg2
1个回答
61
投票

Python元组在psycopg2中转换为sql列表:

cur.mogrify("SELECT * FROM table WHERE column IN %s;", ((1,2,3),))

会输出

'SELECT * FROM table WHERE column IN (1,2,3);'

对于Python新手:不幸的是,使用元组非常重要,而不是列表。这是第二个例子:

cur.mogrify("SELECT * FROM table WHERE column IN %s;", 
    tuple([row[0] for row in rows]))
© www.soinside.com 2019 - 2024. All rights reserved.