如何在 Django ORM 中进行单字符替换( _ )的通配符搜索?
Posted
技术标签:
【中文标题】如何在 Django ORM 中进行单字符替换( _ )的通配符搜索?【英文标题】:How to do wildcard search for single character replacement ( _ ) in Django ORM? 【发布时间】:2019-11-19 20:21:34 【问题描述】:我有一个案例需要使用 Django ORM 进行通配符搜索。
我有一个列 - column1
,其中包含手机号码。
我需要对_
中的mysql
中的单个字符替换进行通配符搜索。
我可以像 Mobilenumbers.objects.raw('SELECT * FROM MOBILENUMBERS WHERE COLUMN1 LIKE '98765_7644')
那样做。但是我如何在 Django ORM 中做同样的事情。
这不是与Wildcard searching in Django 的重复。
【问题讨论】:
SQL 中的单字符通配符是%
。
我猜%
代表zero
或more
字符。但不是exactly one character
。
@KlausD。 _
是单个字符。 %
是多个字符。
【参考方案1】:
您可以使用__regex
lookup [Django-doc],例如:
Mobilenumbers.objects.filter(
column1__regex=r'^98765.7644$'
)
你甚至可以进一步限制它只允许数字作为通配符:
Mobilenumbers.objects.filter(
column1__regex=r'^98765\d7644$'
)
^
和$
分别是开始和结束锚,用于指定字符串以987...
开头,以...644
结尾。
\d
只匹配数字。所以这意味着最后一个正则表达式将匹配 9876547644
,但不匹配 。98765a7644
【讨论】:
我可以将它与contains
结合使用吗?就像如果98765\d7644
返回所有以\d
替换为98765
、7644
和33\d
之间的数字的数字,它应该返回所有以33
开头的数字?
@SukumarRdjf:您可以省略 ^
和 $
锚点。例如r'\d'
将返回所有记录的列中包含一个数字。 ^12
返回所有以column1
开头、以12
开头的记录,以此类推
一切看起来都很好,直到我发现它应该搜索 5000 万条记录并且需要太多时间。请问有没有其他办法?以上是关于如何在 Django ORM 中进行单字符替换( _ )的通配符搜索?的主要内容,如果未能解决你的问题,请参考以下文章
python中CSV写入字符串列表,单行变多个单字符的问题?
在使用 ORM 的 Django 中,如何对不同的值进行多个自连接