伙计们,
这是表 T 的架构(假设模型名称也是 T,具有字段 A、B 和 C):
A B C
--- --- ---
1 a b
2 b NULL
3 c c
现在,我想选择值(A、C 或 B)。我可以选择 A 和 C,如下所示:
T.objects.all().values_list('A','C')
但它只会给我 A 和 C 值。我想要的只是如果 C 为 NULL,那么我应该得到 B。我不知道我是否可以直接使用任何条件或连接来实现这一点(对不起,我不是 SQL 人)但我绝对可以使用以下方法实现这一点:
[(x,z or y) for (x,y,z) in T.objects.all().values_list('A','B','C')]
所以,有两个悬而未决的问题:
有没有更好的方法呢?(最好使用 Queryset/Django ORM 函数)
如果有数万条记录,这样做的内存效率/优化方式是什么?除了使用循环(假设有序主键)将查询集限制为更小的块(假设一次 1000 条记录)之外,还有其他方法吗,如下所示:
max_pkey = T.objects.all().order_by('-pk')[0] current = 0 chunk = 1000 while current <= max_pkey: objs = T.objects.filter(pk__gt=current)[:chunk] Process the objects