https://docs.djangoproject.com/en/3.0/ref/models/querysets/
https://github.com/django/django/blob/master/django/db/models/query.py
프로젝트의 app에 Person
이라는 모델이 있습니다. 데이터 필드로는 name
, gender
, age
가 있습니다.
>>> Person
<class 'person.models.Person'>
>>> Person.objects
<django.db.models.manager.Manager object at 0x7f322522bed0>
Person
은 models.py
에서 정의한 클래스입니다.objects
입니다. objects
란 이름의 manager
가 Person
데이터베이스를 QuerySet
의 형태로 만들게 되며 그 QuerySet
에서 데이터를 검색할 수 있습니다.objects
를 다른 것으로 바꿀 수 있고 QuerySet
의 결과값을 원하는대로 바꿀 수도 있습니다.QuerySet
이 만들어졌으니 장고 기능을 이용해 SQL구문을 몰라도 원하는 데이터를 가져올 수 있습니다. 이제 파이썬과 데이터베이스를 연결해주는 장고 ORM을 사용할 수 있습니다.
queryset을 활용해 많이 쓰이는 함수를 정리해 보겠습니다. 같은 결과값을 찾는 SQL query도 함께 표시했습니다.
all
()>>> Person.objects.all()
<QuerySet [<Person: 홍길동>]>
values
()>>> Person.objects.values()
<QuerySet [{'name': '홍길동', 'gender': 'male', 'age': 15}, {'name': '신사임당', 'gender': 'female', 'age': 35}]>
select *
from Person;
filter
(name='홍길동')filter
(id=1)- SQL query
select *
from Person
where name='홍길동';
exclude
(name='홍길동')exclude
(id=1)- SQL query
select *
from Person
where name!='홍길동';
get
(name='홍길동')
select *
from Person;
queryset.filter(search__icontains=query.strip()) 으로 "eTHRIVE 20MIN SENSE" 를 검색 하는데
"SENS"로는 정확하게 검색이 되는데 "SENSE"로는 검색결과가 없는 걸로 나옵니다.
이것뿐만 아니라 다른 몇몇 결과도 그런식으로 나오는데 이유와 해결 방법을 알 수 있을까요?