장고 ORM 쿼리에서 SQL ''LIKE''에 해당하는 것은 무엇입니까?
다음에 해당하는 것은 무엇입니까?SQL
의 진술.Django
?
SELECT * FROM table_name WHERE string LIKE pattern;
시도해 봤습니다.
result = table.objects.filter( pattern in string )
하지만 그것은 작동하지 않았다.어떻게 구현할 수 있습니까?
사용자 또는 (대소문자 구분 안 함):
result = table.objects.filter(string__contains='pattern')
SQL 등가물은 다음과 같습니다.
SELECT ... WHERE string LIKE '%pattern%';
@아래 Dmitri의 답변은 'pattern%' 또는 '%pattern'과 같은 패턴을 다룹니다.
contains and icontains는 가짜 tru make 쿼리에 의해 언급되었습니다.SELECT ... WHERE headline LIKE '%pattern%
그들과 함께, 당신은 유사한 행동을 가진 이것들이 필요할 수 있습니다: 시작, 시작, 끝, 끝.
만들기
SELECT ... WHERE headline LIKE 'pattern%
또는
SELECT ... WHERE headline LIKE '%pattern
이것은 장고의 사용자 정의 검색을 통해 수행할 수 있습니다.저는 장고와 같은 룩업 애플리케이션으로 룩업했습니다.설치한 후에__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
result = table.objects.filter(string__icontains='pattern')
필드에서 문자열을 대소문자를 구분하지 않는 검색입니다.
sql LIKE '%pattern%' 문에서와 같이 단어의 순서를 유지하기 위해 다음과 같이 ergex를 사용합니다.
qs = table.objects.filter(string__iregex=pattern.replace(' ', '.*'))
문자열 메소드는 불변이므로 패턴 변수는 변경되지 않으며 .*를 사용하면 브레이크라인을 제외한 모든 문자가 0개 이상 발생합니다.
다음을 사용하여 패턴 단어 위에 반복합니다.
qs = table.objects
for word in pattern.split(' '):
qs = qs.filter(string__icontains=word)
당신의 패턴에 있는 단어의 순서는 일부 사람들에게 보존되지 않을 것입니다. 하지만 sql like 문을 모방하려고 하는 경우에는 첫 번째 옵션을 사용하겠습니다.
전체 예제 : 문자열 필드 이름 file_name을 가진 DjangTable이라는 테이블이 있고 mysql의 문자열 file_name에 있는 공간과 일치하는 쿼리에 해당하는 Django 필터를 생성하려고 합니다.
SELECT * FROM DjangTable WHERE file_name LIKE '% %'
class DjangTable(UTModel):
...
file_name = models.CharField(max_length=255, null=False)
...
파이썬을 사용하는 장고에서는 다음과 같습니다.
pattern = ' ' # same as mysql LIKE '% %'
DjangTable.objects.filter(file_name__contains=pattern)
언급URL : https://stackoverflow.com/questions/18140838/what-is-the-sql-like-equivalent-on-django-orm-queries
'source' 카테고리의 다른 글
Firebase.update 실패: 첫 번째 인수가 속성에 정의되지 않았습니다. (0) | 2023.06.13 |
---|---|
정확히 파일이란 무엇입니까?플러시는? (0) | 2023.06.13 |
1 - 10 범위의 난수 생성 (0) | 2023.06.13 |
다양한 제품을 위한 구글 서비스.json 플레이버 (0) | 2023.06.13 |
R 스크립트에서 여러 줄로 코드 분할 (0) | 2023.06.13 |