2015-06-08 97 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)))