Python Django:根据条件选择queryset字段
各位 下面是表T的模式(假设模型名也是带有字段A、B和C的T): 现在,我想选择值(A、C或B)。我可以选择A和C,如下所示:Python Django:根据条件选择queryset字段,python,sql,django,django-queryset,Python,Sql,Django,Django Queryset,各位 下面是表T的模式(假设模型名也是带有字段A、B和C的T): 现在,我想选择值(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_lis
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')]
因此,有两个悬而未决的问题:
T.objects.all().values_list('A','C')
max_pkey=T.objects.all().order_by('-pk')[0]
电流=0
区块=1000
当前在回答关于超大数据集的第二个问题时,您可能需要查看迭代器:
因为这不会在评估时尝试加载整个数据集,但显然存在权衡。我想我可以回答第一个问题
1。有没有更好的办法?(最好使用Queryset/Django ORM函数)
Django提供了允许您执行此操作的工具
来自Django docs
条件表达式允许您在筛选器、批注、聚合和更新中使用if…elif…else逻辑。条件表达式为表的每一行计算一系列条件,并返回匹配的结果表达式
对于您提供的架构,您可以使用以下内容:
T.objects.annotate(colA = F('A'),
colB_C = Case(When(C__isnull=True, then=F('B')),
default=F('C')))
对于每一行,如果列C中的值为空,则选择列B中的值。否则,选择C列中的值
T.objects.annotate(colA = F('A'),
colB_C = Case(When(C__isnull=True, then=F('B')),
default=F('C')))