Django ORM (Object-Relational Mapping)에서 모델은 데이터베이스 테이블 및 관련 필드를 나타내는 중요한 구성 요소입니다. 기본적으로 모델은 필드 및 제약 조건을 포함하여 데이터의 구조를 정의하며 데이터베이스의 테이블에 매핑됩니다. Django에서 모델을 만들 때 django.db.models.Model
에서 상속되는 Python 클래스를 작성하는 것입니다. 이 클래스는 다양한 속성을 정의하며 데이터베이스의 테이블 필드가됩니다.
예를 들어, 책의 간단한 모델은 다음과 같습니다.
<code class="python">from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField()</code>
이 예에서 Book
title
, author
및 publication_date
세 가지 필드가있는 모델입니다. Django의 ORM은 이러한 필드와 함께 데이터베이스에 해당 테이블을 생성합니다.
Django ORM의 모델은 다양한 이점을 제공하여 개발 프로세스와 응용 프로그램의 유지 관리 가능성을 모두 향상시킵니다.
Django ORM의 모델 간의 관계 정의는 다양한 유형의 관계를 나타내는 특정 필드 유형을 사용하여 수행됩니다. 다음은 주요 유형의 관계와이를 정의하는 방법입니다.
일대일 관계 :
OneToOneField
사용하십시오. 한 테이블의 행이 다른 테이블의 정확히 하나의 행과 관련이있을 때. 이것은 모델을 확장하거나 큰 테이블 하나를 2로 분할해야 할 때 유용합니다.
<code class="python">class Driver(models.Model): license_number = models.CharField(max_length=20) class Car(models.Model): driver = models.OneToOneField(Driver, on_delete=models.CASCADE)</code>
일대일 관계 :
ForeignKey
사용하여 한 테이블의 단일 행이 다른 테이블의 여러 행과 연관 될 수있는 관계를 정의하십시오. 이것은 데이터베이스에서 가장 일반적인 유형의 관계입니다.
<code class="python">class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) title = models.CharField(max_length=200)</code>
다수의 관계 :
한 테이블의 행 ManyToManyField
다른 테이블의 여러 행과 관련 될 수 있고 그 반대도 마찬가지입니다. 이것은 항목 분류와 같은 시나리오에 유용합니다.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200) class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField(Book)</code>
이러한 관계를 정의 할 때 관련 객체가 삭제 될 때 발생하는 일을 정의하기 위해 on_delete
매개 변수를 지정합니다.
Django ORM의 모델 쿼리 최적화는 응용 프로그램의 성능을 향상시키기 위해 필수적입니다. 다음은 다음과 같은 모범 사례입니다.
관련 및 프리 페치 관련 선택 :
데이터베이스 쿼리 수를 줄이기 위해 일대일 및 다중 관계에 select_related()
사용하십시오. 다수의 마니 및 반전 된 다중 관계에 prefetch_related()
사용하십시오.
<code class="python"># Fetching all books with their authors books = Book.objects.select_related('author').all() # Fetching all authors with their books authors = Author.objects.prefetch_related('books').all()</code>
쿼리 세트 방법을 효율적으로 사용하십시오 .
filter()
, exclude()
, order_by()
및 values()
와 같은 django의 queryset api 메소드를 활용하여 필요한 데이터 만 가져 와서 처리 및 전송 된 데이터의 양을 줄입니다.
<code class="python"># Fetching only specific fields authors = Author.objects.values('id', 'name')</code>
select_related()
및 prefetch_related()
사용하여이를 완화하십시오. 적절하게 인덱스를 사용하십시오 .
쿼리 실행 속도를 높이기 위해 필터링 또는 주문 작업에 자주 사용되는 필드에 데이터베이스 인덱스를 추가하십시오.
<code class="python">class Book(models.Model): title = models.CharField(max_length=200, db_index=True)</code>
쿼리 결과 제한 :
특히 큰 데이터 세트를 처리 할 때 가져온 개체 수를 제한하기 위해 limit()
및 offset()
또는 Django의 QuerySet
슬라이스와 같은 메소드를 사용합니다.
<code class="python"># Fetching the first 10 books books = Book.objects.all()[:10]</code>
ManyToManyField
또는 reverse ForeignKey
에서 select_related()
사용하지 마십시오 .select_related()
ManyToManyField
또는 Reverse ForeignKey
관계에서 작동하지 않습니다. 대신 prefetch_related()
사용하십시오.이러한 모범 사례를 따르면 Django ORM 쿼리의 성능을 크게 최적화하고 응용 프로그램의 전반적인 효율성을 향상시킬 수 있습니다.
위 내용은 Django Orm의 모델은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!