在django查询中等效的SQL"LIKE"

Asw*_*esh 88 python sql django django-models django-queryset

django中这个SQL语句的等价物是什么?

SELECT * FROM table_name WHERE string LIKE pattern;
Run Code Online (Sandbox Code Playgroud)

我如何在django中实现这个?我试过了

result = table.objects.filter( pattern in string )
Run Code Online (Sandbox Code Playgroud)

但那没用.我该如何实现?

fal*_*tru 177

使用包含icontains:

result = table.objects.filter(string__contains='pattern')
Run Code Online (Sandbox Code Playgroud)

  • 对于不区分大小写的搜索,请使用**__ icontains** - >`result = table.objects.filter(string__icontains ='pattern')` (21认同)
  • 此答案仅涵盖可能模式的子集.它不会处理像'%a%b%`这样的模式. (12认同)
  • @LS 那会匹配 `ba` 而 `LIKE %a%b%` 不会。 (2认同)
  • 由于上述原因,这个答案是不完整的。它还应该包括@Dmitry 的答案中的信息。 (2认同)

小智 27

包含和falsetrue提到的icontains使查询像 SELECT ... WHERE headline LIKE '%pattern%

与它们一起,您可能需要具有相似行为的这些行为: startswith,istartswith,endswith,iendswith

制造

SELECT ... WHERE headline LIKE 'pattern%

要么

SELECT ... WHERE headline LIKE '%pattern


Pet*_*uhý 20

这可以通过Django 的自定义查找来完成。我已经将查找变成了一个类似 Django 的查找应用程序。安装后,将启用__like使用%_通配符进行查找。

应用程序中所有必要的代码是:

from django.db.models import Lookup
from django.db.models.fields import Field


@Field.register_lookup
class Like(Lookup):
    lookup_name = 'like'

    def as_sql(self, compiler, connection):
        lhs, lhs_params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params
        return '%s LIKE %s' % (lhs, rhs), params
Run Code Online (Sandbox Code Playgroud)


Ven*_*tra 8

result = table.objects.filter(string__icontains='pattern')
Run Code Online (Sandbox Code Playgroud)

不区分大小写搜索字段中的字符串.

  • 不错,但差不多三年前就已经给出了相同的答案。 (8认同)