免责声明:我写的原始查询都是假人,我的真实查询很复杂,没有原始查询就无法执行,
执行这个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)
答案 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)