如何编写Django查询以筛选包含独立值1.2.3的记录?
解决方案
要筛选出Col2中包含独立值"1.2.3"的记录,需要用正则匹配精准定位完整元素,避免匹配带前后缀的情况。可以通过Django的Q对象结合regex查询条件实现,覆盖以下四种场景:
- 字段值就是纯"1.2.3"
- "1.2.3"位于逗号分隔列表的开头(后跟逗号)
- "1.2.3"位于逗号分隔列表的结尾(前跟逗号)
- "1.2.3"位于逗号分隔列表的中间(前后均有逗号)
具体代码如下:
from django.db.models import Q # 构建匹配条件 matches = Q(col2__regex=r'^1\.2\.3$') | \ Q(col2__regex=r'^1\.2\.3,') | \ Q(col2__regex=r',1\.2\.3$') | \ Q(col2__regex=r',1\.2\.3,') # 执行查询 valid_records = TableName.objects.filter(matches)
代码说明
^1\.2\.3$:匹配字段值恰好是"1.2.3"的情况(^表示字符串开头,$表示字符串结尾)^1\.2\.3,:匹配以"1.2.3,"开头的字段值,即"1.2.3"是列表第一个元素,1\.2\.3$:匹配以",1.2.3"结尾的字段值,即"1.2.3"是列表最后一个元素,1\.2\.3,:匹配中间包含",1.2.3,"的字段值,即"1.2.3"是列表中间的元素
执行该查询后,会返回你期望的sahil3、sahil4、sahil6三条记录,自动排除带前后缀的sahil1、sahil2、sahil5。
内容的提问来源于stack exchange,提问作者SAGY
相关产品推荐
相关产品推荐

