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()
authors = Author.objects.all().values('name', 'email')
for author in Author.objects.all(): books = author.books.all() # do something with the books
authors = Author.objects.prefetch_related('books') for author in authors: # get books from prefetched related books = author.books.all() # do something with the books
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'), ]
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 } } }
以上がDjango フレームワークにおける ORM 最適化のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。