django - 或使用 lambda 查询
django - OR query using lambda
我想使用 django ORM 执行 OR 查询。我参考了 this 个答案,它符合我的需要。
我有一个动态生成的整数列表。这些整数表示特定 table 中的用户 ID。这个 table 也有一个日期字段。我想在数据库中查询给定日期列表中的所有用户 ID。
例如:从下面 table,我想要记录日期为 2015-02-28
的用户 ID 2 和 3
id | date
---------------
1 | 2015-02-23
1 | 2015-02-25
1 | 2015-02-28
2 | 2015-02-28
2 | 2015-03-01
3 | 2015-02-28
我无法确定以下哪两个最适合我的用例:
Table.objects.filter(reduce(lambda x, y: (x | y) & Q(date=datetime.date(2015, 2, 28)), [Q(user_id=i) for i in ids])
或
Table.objects.filter(reduce(lambda x, y: (x | y), [Q(user_id=i) for i in ids]) & Q(date=datetime.date(2015, 2, 28))
目前,以上两者都产生相似的输出。如果没有 lambda
,下面的查询将满足我的需要:
Table.objects.filter(Q(user_id=3) & Q(date=datetime.date(2015, 2, 28))| Q(user_id=2) & Q(date=datetime.date(2015, 2, 28)))
我认为你不需要 reduce
和 Q
对象,你可以这样做:
Table.objects.filter(
user_id__in=[2,3],
date=datetime.date(2015, 2, 28),
)
我想使用 django ORM 执行 OR 查询。我参考了 this 个答案,它符合我的需要。
我有一个动态生成的整数列表。这些整数表示特定 table 中的用户 ID。这个 table 也有一个日期字段。我想在数据库中查询给定日期列表中的所有用户 ID。
例如:从下面 table,我想要记录日期为 2015-02-28
的用户 ID 2 和 3id | date
---------------
1 | 2015-02-23
1 | 2015-02-25
1 | 2015-02-28
2 | 2015-02-28
2 | 2015-03-01
3 | 2015-02-28
我无法确定以下哪两个最适合我的用例:
Table.objects.filter(reduce(lambda x, y: (x | y) & Q(date=datetime.date(2015, 2, 28)), [Q(user_id=i) for i in ids])
或
Table.objects.filter(reduce(lambda x, y: (x | y), [Q(user_id=i) for i in ids]) & Q(date=datetime.date(2015, 2, 28))
目前,以上两者都产生相似的输出。如果没有 lambda
,下面的查询将满足我的需要:
Table.objects.filter(Q(user_id=3) & Q(date=datetime.date(2015, 2, 28))| Q(user_id=2) & Q(date=datetime.date(2015, 2, 28)))
我认为你不需要 reduce
和 Q
对象,你可以这样做:
Table.objects.filter(
user_id__in=[2,3],
date=datetime.date(2015, 2, 28),
)