2014-03-07 39 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个平面列表。

相关问题