Django ORM(オブジェクトリレーショナルマッピング)では、モデルはデータベーステーブルとそれに関連するフィールドを表す重要なコンポーネントです。基本的に、モデルは、フィールドとその制約を含むデータの構造を定義し、データベース内のテーブルにマッピングされます。 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
3つのフィールドを持つモデルです。 DjangoのORMは、これらのフィールドを使用してデータベースに対応するテーブルを作成します。
Django ORMのモデルは多くの利点を提供し、開発プロセスとアプリケーションの保守性の両方を高めます。
Django ORMのモデル間の関係の定義は、さまざまなタイプの関係を表す特定のフィールドタイプを使用して行われます。関係の主なタイプとそれらを定義する方法は次のとおりです。
1対1の関係:
1つのテーブルの列が別のテーブルの1つの行に正確に関連している場合、 OneToOneField
使用します。これは、モデルを拡張したり、1つの大きなテーブルを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>
1対多くの関係:
ForeignKey
を使用して、1つのテーブルの1つの行が別のテーブルの複数の行に関連付けられる関係を定義します。これは、データベースで最も一般的なタイプの関係です。
<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のモデルクエリの最適化は、アプリケーションのパフォーマンスを改善するために不可欠です。次に、次のようなベストプラクティスをいくつか紹介します。
関連関連とプレッチ関連を選択します。
1対1の関係に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>
QuerySetメソッドを効率的に使用します。
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 中国語 Web サイトの他の関連記事を参照してください。