sql - 如果值为 null,Postgre SQL 忽略过滤条件
问题描述
我将以下三个变量传递给查询A,B and C
。
A、B 和 C 可以取任何值,包括 null。
当我运行以下查询集时,如果 A、B 或 C 中的值为 null,它应该忽略条件
queryset = User.objects.values().filter(A_name=A, B_name=B, C_name =C)
例如,如果 C 值传入 null 那么查询应该表现得像
queryset = User.objects.values().filter(A_name=A, B_name=B)
如果 C 和 A 值传入 null 那么查询的行为应该像
queryset = User.objects.values().filter(B_name=B)
我不想写下所有 9 个组合并写一个查询。有什么办法可以轻松做到吗?
解决方案
您可以将参数保留为 dict 并仅将不等于 None 的参数发送到 filter() 方法:
arguments = {"A_name": A, "B_name": B, "C_name": C}
arguments_without_null = {k: v for k, v in arguments.items() if v is not None}
queryset = User.objects.values().filter(**arguments_without_null)
推荐阅读
- mapr - 无法从 MapR Data Science Refinery docker 容器访问 HDFS
- google-cloud-platform - 如何使用 PUBSUB 作为触发器从 Google Cloud 函数返回 JSON?
- mpls - 在启用 mpls 的路由器上配置 LDP
- ios - 在视图出现之前,我可以在哪里将 contentOffset 设置为 UICollectionView 中的最后一项?
- mysql - 如何比较列并在表中计数
- cassandra - Cassandra 浮点精度
- c# - UWP 无法更改 C# 代码中的图像源
- java - 为什么 onReceivedError() 不适用于所有 Android 手机?
- python - 如何根据其他列的条件用另一列的值填充一列?
- flutter - Flutter中Completer和Isolates的解释和区别