各位
下面是表T的模式(假设模型名也是T,字段A、B和C):
A B C
--- --- ---
1 a b
2 b NULL
3 c c
现在,我要选择值(A、C或B)。我可以选择A和C,如下所示:
^{pr2}$但它只给我A和C值。我只想如果C为NULL,那么我应该得到B。我不知道是否可以直接使用任何条件或join来实现这一点(抱歉,我不是SQL人员),但我肯定可以通过以下方式实现:
[(x,z or y) for (x,y,z) in T.objects.all().values_list('A','B','C')]
因此,有两个开放性问题:
有没有比这更好的方法呢?(最好使用Queryset/Django ORM函数)
如果有成千上万条记录,内存效率/优化的方法是什么?除了使用如下循环(假设有序主键)将queryset限制为更小的块(假设一次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
对于非常大数据集的第二个问题,您可能需要看看迭代器:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.iterator
因为这不会尝试在评估时加载整个数据集,但显然存在权衡。在
我想我能回答第一个问题。在
1。有更好的办法吗?(最好使用Queryset/Django ORM函数)
Django提供了Conditional expressions允许您这样做。在
从Django docs
对于您提供的架构,可以使用以下内容:
对于每一行,如果C列中的值为空,则选择B列中的值。否则,选择C列中的值。在
相关问题 更多 >
编程相关推荐