2015-06-08 94 views
0

我正在Django 1.8中工作,并使用connection.cursor进行一些原始SQL查询。使用cursor.executemany传递多个参数?

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

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文档。谁能帮忙?

+0

https://docs.python.org/2/library/sqlite3。 HTML – IanAuld

回答

1

你的问题是你传递了更多的参数给execute比它接受。你需要的是将查询的参数组合成一个元组。要做到这一点的方法之一是使用itertools.chain到链两份名单元素融入其中迭代,可用于创建一个元组:

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