【问题标题】:Parameterized queries with psycopg2: SELECT from a Python list使用 psycopg2 进行参数化查询:从 Python 列表中选择
【发布时间】:2011-08-26 12:18:54
【问题描述】:

给定 Python 中的大 (~10,000) 个整数列表,我如何有效地 SELECT 表中 id 在列表中的所有项目?

我试过了:

>>> lst2
[{'id': 97600167}, {'id': 97600168}, {'id': 97611194}]
>>> cur.executemany("SELECT id, parent_id FROM my_table WHERE id=%(id)s", lst2)
>>> cur.fetchall()
[(97611194, 10020688), (None, None), (None, None)]

表中确实存在第二个和第三个 id(97600168、97611194)。

【问题讨论】:

    标签: python psycopg2 sql-parametrized-query


    【解决方案1】:

    使用您的示例,使用where id in,然后传递一个参数,该参数是您要选择的 id 值的元组:

    >>> lst2
    [{'id': 97600167}, {'id': 97600168}, {'id': 97611194}]
    >>> ids = tuple(x['id'] for x in lst2)
    >>> cur.execute("SELECT id, parent_id FROM my_table where id in %s",[ids])
    

    【讨论】:

    • 谢谢,但它给了我一个psycopg2.ProgrammingError: can't adapt 异常。
    • 你用的是什么版本?我在发布之前在psycopg2.__version__ == 2.0.14 上测试了这个参数化。您确实传递了(单个项目序列)ints 的元组,不是吗,如我的示例所示?
    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多