Django フレームワークでの ORM のベスト プラクティス

WBOY
リリース: 2023-06-17 12:57:19
オリジナル
899 人が閲覧しました

Django は人気のある Python Web フレームワークであり、その ORM (オブジェクト リレーショナル マッピング) レイヤーはその中核機能の 1 つです。 ORM は、Web アプリケーションでデータベースとの対話を処理するためのより便利な方法を開発者に提供します。 ORM はその強力な機能により、開発者の間でますます人気が高まっています。ただし、ORM の複雑さは、不適切な設計の選択やパフォーマンスの問題を引き起こす可能性もあります。これらの問題を回避するために、この記事では Django ORM のベスト プラクティスを紹介します。

  1. クエリ セット (QuerySet) を使用してデータ クエリを簡素化する

Django ORM のクエリ セットは、非常に強力なクエリ メソッドを提供します。データベース内のデータをクエリする必要がある場合は、常にクエリセットを使用する必要があります。これは ORM の主要な概念の 1 つであり、データベースから取得される一連のオブジェクトを表します。クエリセットには連鎖呼び出しを適用できるため、コード内で複数のフィルターを簡単に組み合わせることができます。クエリ セットを使用すると、SQL クエリ ステートメントを手動で記述する必要がなくなり、非常に便利です。

以下はクエリ セットの例です:

books = Book.objects.filter(author__name='Jane Doe').exclude(published_at__year=2020).order_by( 'title ')

上記のコードは、著者名が「Jane Doe」で、2020 年に出版されていない書籍をタイトルのアルファベット順に並べてクエリするために使用されます。

2. クエリ セットの数を最小限に抑える

データベースへのすべてのリクエストによりオーバーヘッドが発生します。したがって、データベースへのリクエストの数は最小限に抑える必要があります。

複数のクエリ セットをクエリする必要がある場合は、prefetch_popular と select_popular を使用してクエリ セットを最適化できます。

3. モデル内のプロパティまたはメソッドを使用して計算を実行する

ORM フレームワークの利点の 1 つは、すべてのデータベース操作がオブジェクト操作に変換されることです。このアプローチを使用すると、コードが簡素化され、開発者の作業負荷が軽減されます。モデル オブジェクトに対してプロパティまたはメソッドを実行して、必要な結果を取得できます。

たとえば、Book モデルのページ数を計算するメソッドを追加する必要がある場合:

class Book(models.Model):
    ...
    def get_num_pages(self):
        return self.word_count / self.words_per_page
ログイン後にコピー

この方法では、get_num_pages() 関数を呼び出すことができ、必要はありません。ページ数を手動で計算します。これは、データベースから値をクエリするよりもはるかに高速です。

4. インデックスを使用してパフォーマンスを向上させる

インデックスは、クエリのパフォーマンスを最適化するための強力なツールです。モデルにインデックスを追加すると、クエリを高速化できます。インデックスは単一列インデックスまたは複合インデックスにすることができ、OrderBy、Where、Join で頻繁に使用される頻繁にアクセスされるデータ列を優先して、最適化を実現できます。インデックスの構築によりテーブルの維持コストが増加するため、長期的な維持コストを考慮する必要があります。

たとえば、モデルの特定の列 (本のタイトルなど) をクエリする必要がある場合は、モデルの Meta クラスに order_with_ respect_to ステートメントを追加できます。例:

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey('Author', on_delete=models.CASCADE)

    class Meta:
        ordering = ('title',)
        indexes = [
            models.Index(fields=['title', 'author'], name='book_title_author_idx')
        ]
ログイン後にコピー

上記のコードは、タイトルによって実装されています。著者属性によってソートし、この組み合わせにインデックスを追加します。

5. データベース操作のパフォーマンスに注意する

ORM を使用する場合、アプリケーションのパフォーマンスを向上させるためにデータベースへのアクセス数を減らすように努める必要があります。データベースへのアクセスを減らすいくつかの方法を次に示します。

a. 通过对数据的预加载和缓存来减少查询

b. 避免在循环中进行多次查询

c. 如果使用的是 PostgreSQL 数据库,在 signals 中加载计算后的数据,可以避免查询重复
ログイン後にコピー

概要:

この記事では、Django ORM のベスト プラクティス テクニックをいくつか示します。これらのヒントに注意深く従うことで、開発者は ORM を使用するときによくある間違いやアンチパターンを回避できます。これらの推奨事項に従ってパフォーマンスと速度に関して ORM を最適化する場合、間違った最適化を避けるためにトレードオフとテストが必要です。適切な ORM 設計を使用すると、アプリケーションのパフォーマンスと信頼性を大幅に向上させることができます。

以上がDjango フレームワークでの ORM のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート