2014-03-07 80 views
0

免責聲明:生我已經寫了波紋管是虛設的查詢,我真正的查詢是複雜的,沒有原始查詢不能被執行,Django的原始的SQL語句,從行獲取字段值

執行這個SQL語句:

from django.db import connection, transaction 
    cursor = connection.cursor() 
    cursor.execute("SELECT id, name, phone FROM table1 WHERE rule=1") 
    result_list= cursor.fetchall() 

下一步驟需要去在result_list和執行第二查詢,其中i的where子句中使用name參數值。

for row in result_list: 
     sql_string = 'SELECT id FROM table2 WHERE name='+ row[1] 
     cursor = connection.cursor() 
     cursor.execute(sql_string) 
     ids = cursor.fetchall() 

我的問題:我如何可以連接所有從循環的不同迭代的ID爲單一ids陣列/列表

下面是不是我要找的,因爲我想有值的單個陣列/列表,而不是一個數組的數組列表

id_list = [] 
id_list.append(ids) 

回答

0

我不能完全肯定我理解的問題,但也許你應該使用的/名單210:

id_list.extend(ids) 
1

對result_list的迭代將爲每次迭代產生一個查詢。更好的方法是使用SQL IN運算符,並在一個查詢中爲您選擇第二個表的所有id

sql_string = 'SELECT id FROM table2 WHERE name IN (%s)' 
cursor = connection.cursor() 
# You should let cursor.execute handle string interpolation 
cursor.execute(sql_string, [', '.join(x.name for x in result_list)]) 
id_list = [x.id for x in cursor.fetchall()] 

最後一行使用列表理解來改變列表清單爲包含所有id個平面列表。

相關問題