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
,并执行第二个查询,在这个查询中,我会在条件中使用 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
我不太确定我是否完全理解这个问题,但也许你应该使用 extend
:
id_list.extend(ids)
1
对结果列表进行迭代时,每次迭代都会产生一个查询。更好的做法是使用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
。