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

新手上路,请多包涵

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

原文由 k_wisniewski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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]))

原文由 philofinfinitejest 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个问题很老,也许有一个更新的问题,但我的同事们现在的答案是:

 sql = "SELECT * FROM table WHERE column = ANY(%(parameter_array)s)"
cur.execute(sql,{"parameter_array": [1, 2, 3]})

原文由 Brandon Henry 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题