我有一个字符串列表(比如s = ['1995','1996','1997']
)。我需要在我的数据库中查找所有行,其中某些列的前四个字符匹配该列表中的任何项目(例如1995-01-01
或1996-05-04
)。
Found __in
,但它找到完全匹配。
import operator
years = ['1995','1996','1997', ...]
query = reduce(operator.or_, [Q(year__startswith=year) for year in years])
results = queryset.filter(query)
这将为您提供类似于在给定数据集WHERE year LIKE '1995%' OR year LIKE '1996%' ...;
时可能表现不佳的 SQL 。使用手动编写 SQL 可能会获得更好的性能extra()
奇怪的是,我刚刚用几乎完全相同的代码回答了另一个问题!