Django原始sql,从一行获取字段值

时间:2014-03-07 13:04:20

标签: python sql django

免责声明:我写的原始查询都是假人,我的真实查询很复杂,没有原始查询就无法执行,

执行这个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并执行第二个查询,其中我在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)

2 个答案:

答案 0 :(得分: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()]

最后一行使用list comprehension将列表列表更改为包含所有id s的平面列表。

答案 1 :(得分:0)

我不完全确定我理解这个问题,但也许您应该使用extend

id_list.extend(ids)