用cursor.executemany传递多个参数?

时间:2015-06-08 12:01:47

标签: python django

我正在使用Django 1.8并使用connection.cursor进行一些原始SQL查询。

我的问题是如何安全地向游标提供多个参数。这是我的代码:

   cursor = connection.cursor()
    query = "SELECT cost, id, date, org_id FROM mytable "
    query += " WHERE ("
    for i, c in enumerate(codes):
        query += "id=%s "
        if (i != len(codes)-1):
            query += ' OR '
    query += " AND "
    for i, c in enumerate(orgs):
        query += "org_id=%s "
        if (i != len(orgs)-1):
            query += ' OR '
    cursor.execute(query, tuple(codes), tuple(orgs))

但是这给了我:

 TypeError: execute() takes at most 3 arguments (4 given)

我正在尝试关注the PEP documentation on execute,它表示可以使用executemany代替,但这似乎也无济于事:

 cursor.executemany(query, [tuple(codes), tuple(orgs)])

如果没有示例,我就无法遵循PEP文档。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你的问题是你传递的更多参数execute比它接受的更多。您需要的是将查询的参数组合到一个元组中。一种方法是使用itertools.chain将两个列表的元素链接到一个可用于创建单个元组的iterable中:

import itertools
cursor.execute(query, tuple(itertools.chain(codes, orgs)))