반응형
Database에 쿼리를 해야하는 상황에 ORM 방식으로 원하는 모델까지 생성을 한 상태에서의 쿼리 방법을 알아보겠습니다.
class Person(models.Model):
first_name = models.CharField(...)
last_name = models.CharField(...)
birth_date = models.DateField(...)
Person 이라는 ORM 모델 객체를 만들었을때 쿼리하는 방법입니다.
1. raw 함수 활용 하기
Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')
raw 함수는 우리가 일반적으로 사용하는 sql문으로 Database 조회를 가능하게 해주는 함수입니다.
2. 직접 connection 객체 사용하기
from django.db import connection, connections
# connection은 default로 설정되어 있는 Database를 사용합니다.
# connections는 원하는 Database를 선택하여 사용할 수 있습니다.
# ex) with connections['dev_db'].cursor as cursor:
def my_custom_sql(self):
with connection.cursor() as cursor:
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
connection 객체를 직접 호출하여 데이터 베이스에 접근하는 방식입니다.
connections를 사용하여 default가 아닌 settings.py에 등록된 다른 Database의 connection을 사용할 수 있습니다.
settings.py에 Database 여러개 등록하기
# 프로젝트의 settings.py DATABASES 설정 값에서 추가
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "main_db",
"USER": " .",
"PASSWORD": " .",
"HOST": " .",
"PORT": " .",
},
"read_replica": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "replica_db",
"USER": " .",
"PASSWORD": " .",
"HOST": " .",
"PORT": " .",
},
}
3. objects의 함수 이용 하기
Person.objects.all() # 테이블의 모든 데이터를 조회합니다.
Person.objects.first() # 조회 내용중 상위에 1개의 값을 가져옵니다.
Person.objects.filter(조건문=조건값) # where 조건문에 사용됩니다.
# 조건문 예시
# Person__name__exact='Django'
# Relation이 있는 Person 테이블의 name에 해당하는 필드가 exact(같은 문자 찾기) 한 조건문입니다.
filter 함수에 조건문을 넣어 여러가지 쿼리를 쉽게 사용 가능합니다.
조건문 알아보기
- __exact : 정확히 같은 값
- __iexact : 대소문자 구분없이 같은 값
- __contains : 포함하는 문자 찾기
- __icontains : 대소문자 구분없이 포함하는 문자 찾기
- __in : list, tuple, String 과 같은 배열에 포함하는 대상 찾기
- __gt, __gte, __lt, __lte : >, >=, <, <=
- __range : 범위에 해당하는 데이터를 조회합니다. (주로 날짜나 숫자 범위)
반응형
'Python > Django' 카테고리의 다른 글
[Django] ORM 모델 클래스 선언하기 feat. Decriptor (0) | 2022.08.11 |
---|---|
[Django] Django에서 custom 명령어를 만들어 보자 (0) | 2022.08.09 |
[Django] django-environ 사용 방법 (0) | 2022.08.09 |
[Django] Template 유용한 3가지 팁 모음 (0) | 2022.08.08 |
[Django] View 단순화 및 알아두면 좋을 내용 정리 (0) | 2022.08.08 |