You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何传入ID列表批量filter查询 单次获取所有关联账号ID

解决方案

你可以直接使用Django ORM内置的__in运算符查询多个匹配值,配合distinct()方法在数据库层面完成去重,全程只发起1次数据库请求,完全避免循环查询的性能损耗,同时保留对原有单个ID入参的兼容性。

修改后代码

from typing import List, Union
from project import models

def get_followers_ids(system_ids: Union[int, List[int]]) -> List[int]:
    # 兼容单个ID和ID列表两种入参格式
    filter_condition = {}
    if isinstance(system_ids, list):
        filter_condition["system_id__id__in"] = system_ids
    else:
        filter_condition["system_id__id"] = system_ids
    
    return list(
        models.Mapper.objects.filter(**filter_condition)
        .values_list("account__id", flat=True)
        .distinct()
    )

使用示例

原有单个ID调用(兼容旧逻辑无需修改)

system_id = 12350
utility_ids = get_followers_ids(system_id)
print(utility_ids)

输出:

>>> [14338, 14339, 14341, 14343, 14344, 14346, 14347, 14348, 14349, 14350, 14351]

多个ID调用

system_ids = [1, 2]
utility_ids = get_followers_ids(system_ids)
print(utility_ids)

输出:

>>> [3,4,5,6,7,8]

实现说明

  • __in运算符会匹配所有system_id__id在传入列表范围内的记录,仅执行1次SQL查询,性能远高于循环多次查询
  • distinct()方法直接在SQL查询阶段对返回的账号ID去重,不需要在Python内存中额外做合并去重操作
  • 代码做了向下兼容,原有调用单个ID的逻辑不需要调整即可正常运行

内容的提问来源于stack exchange,提问作者The Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:45:02