ORM(Object-Relational Mapping)
Django의 ORM은 데이터베이스 쿼리를 위한 강력한 도구입니다. 직접 SQL을 작성하는 대신, Django ORM의 파이썬 메서드를 사용하여 데이터베이스를 쿼리할 수 있습니다.
# 모델의 모든 인스턴스 검색
instances = YourModel.objects.all()
# 필터링된 인스턴스 검색
filtered_instances = YourModel.objects.filter(your_field='your_value')
# 단일 인스턴스 검색
instance = YourModel.objects.get(id='your_id')
더 복잡한 쿼리에는 Django의 ORM이 강력하고 유연한 도구를 제공합니다. 여러 개의 필터 조건을 연결하거나, 대소문자 구분 없는 포함 여부를 확인하는 __icontains와 같은 필드 룩업을 사용할 수 있습니다. 또한 lookups에서 관계를 걸쳐 조회할 수도 있습니다.
# 여러 개의 필터 조건 연결
filtered_instances = YourModel.objects.filter(your_field1='value1', your_field2='value2')
# 대소문자 구분 없는 포함 여부 확인
filtered_instances = YourModel.objects.filter(your_field__icontains='value')
# 관계를 걸쳐 조회
filtered_instances = Entry.objects.filter(blog__name='Django')
모델의 새 인스턴스를 생성하려면 Manager의 create() 메서드를 사용할 수 있습니다(일반적으로 YourModel.objects.create(your_field='your_value')와 같이 사용됩니다). 인스턴스를 업데이트하려면 필드의 값을 변경하고 .save() 메서드를 호출하면 됩니다.
# 새 인스턴스 생성
new_instance = YourModel.objects.create(your_field='your_value')
# 인스턴스 업데이트
instance.your_field = 'new_value'
instance.save()
Django ORM은 annotate() 및 aggregate()를 사용하여 집계 및 복잡한 쿼리도 지원합니다. 이를 통해 SQL의 GROUP BY 및 기타 기능에 대한 고수준의 파이썬 인터페이스를 제공합니다.
Django 쿼리는 지연(lazy) 방식으로 동작한다는 것을 기억하는 것이 중요합니다. 이는 쿼리가 필요한 경우에만 평가된다는 것을 의미합니다. 이를 통해 데이터베이스에 접근하지 않고도 여러 개의 필터 조건을 연결할 수 있습니다.
요약하면, Django의 ORM은 SQL과 마찬가지로 데이터베이스와 상호작용하는 강력한 도구입니다. 다시 말해, Python을 사용하여 데이터베이스에서 레코드를 생성, 검색, 업데이트 및 삭제하는 방법입니다.