Django の ORM (Object-Relational Mapping) 機能は、人気のある Python Web フレームワークとして Web 開発で広く使用されており、開発者はデータベースを直接操作せずに Python オブジェクトを使用してデータベースを操作できます。ただし、データ量が増加すると、ORM のパフォーマンスが低下する可能性があります。したがって、この記事では、アプリケーションのパフォーマンスを向上させるための Django ORM 最適化のヒントをいくつか紹介します。
Django ORM の .select_popular() メソッドは、すべての関連オブジェクトのデータをプリロードできるため、データベースへの複数のクエリを回避できます。デフォルトでは、ORM を使用してデータベースにクエリを実行する場合、Django はメイン モデルからのみデータをフェッチします。モデルに 1 つ以上の外部キーがある場合、.select_popular() を通じてすべての外部キー オブジェクトを取得できます。たとえば、
books = Book.objects.select_related('publisher').all()
上のコードでは、Books モデルに外部キーの発行者があり、関連する発行者モデルを選択すると、1 つのクエリですべての関連データを取得できます。これにより、後続のクエリでデータベースに繰り返しアクセスすることが回避され、パフォーマンスが向上します。
publishers = Publisher.objects.prefetch_related('books').all()上記のコードでは、Publisher モデルには逆関連付けの書籍があります。 .prefetch_popular () を使用すると、すべてのパブリッシャーを一度に取得でき、複数のデータベース クエリのオーバーヘッドを回避できます。
authors = Author.objects.all().values('name', 'email')上記のコードでは、作成者の名前と電子メールを取得するだけで済み、.values() メソッドを使用して結果を一度に取得できます。
for author in Author.objects.all(): books = author.books.all() # do something with the books対照的に、.prefetch_relative() メソッドを使用してループ クエリを置き換え、データベース クエリを減らすことができます:
authors = Author.objects.prefetch_related('books') for author in authors: # get books from prefetched related books = author.books.all() # do something with the books上記ではコードでは、 .prefetch_popular() メソッドを使用して本の著者のデータをプリロードし、データベース アクセスの数を減らします。
class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) class Meta: indexes = [ models.Index(fields=['title'], name='title_index'), models.Index(fields=['author'], name='author_index'), ]上記のコードでは、title 列と author 列に基づいてクエリを実行する 2 つのインデックスを定義します。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'conn_max_age': 60, 'charset': 'utf8mb4', 'pool_size': 5 } } }上記のコードでは、MySQL データベースを使用し、接続プール サイズを 5 接続に設定しました。 結論Django アプリケーションでは、ORM はアプリケーションとデータベース間の対話プロセスを大幅に簡素化できる非常に強力な機能です。上記のヒントと最適化を使用して ORM のパフォーマンスを向上させると、この強力な機能をさらに活用してアプリケーションのパフォーマンスと信頼性を向上させることができます。
以上がDjango フレームワークにおける ORM 最適化のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。