ホームページ バックエンド開発 Python チュートリアル Django の QuerySet を効果的に使用する

Django の QuerySet を効果的に使用する

Apr 05, 2017 pm 03:05 PM

オブジェクト リレーショナル マッピング (ORM) を使用すると、SQL データベースとの対話が簡単になりますが、非効率的で生の SQL よりも遅いとも考えられています。

ORM を効果的に使用するには、ORM がデータベースにクエリを実行する方法を理解する必要があります。この記事では、Django ORM システムを効果的に使用して中規模から大規模のデータ セットにアクセスする方法に焦点を当てます。

Django のクエリセットは怠惰です

Django のクエリセットは、オプションのクエリでフィルタリングされた、データベース内の複数のレコード (行) に対応します。たとえば、次のコードはデータベース内の「Dave」という名前のすべての人物を取得します:

person_set = Person.objects.filter(first_name="Dave")
ログイン後にコピー

上記のコードはデータベース クエリを実行しません。 person_set を使用したり、フィルタ条件を追加したり、関数に渡したりすることができます。これらの操作はデータベースに送信されません。データベース クエリは Web アプリケーションのパフォーマンスに大きな影響を与える要素の 1 つであるため、これは正しいことです。

実際にデータベースからデータを取得するには、queryset:

for person in person_set:
    print(person.last_name)
ログイン後にコピー

を走査する必要があります。 Django のクエリセットにはキャッシュがあります

クエリセットを反復処理すると、一致するすべてのレコードがデータベースから取得され、Django モデルに変換されます。これを評価といいます。これらのモデルはクエリセットの組み込みキャッシュに保存されるため、クエリセットを再度反復処理する場合に、同じ一般的なクエリを再度実行する必要はありません。

たとえば、次のコードはデータベース クエリのみを実行します:

pet_set = Pet.objects.filter(species="Dog")
# The query is executed and cached.
for pet in pet_set:
    print(pet.first_name)
# The cache is used for subsequent iteration.
for pet in pet_set:
    print(pet.last_name)
ログイン後にコピー

if ステートメントはクエリセットの実行をトリガーします

クエリセット キャッシュの最も便利な点は、クエリセットにデータが含まれているかどうかを効果的にテストできることです。データが存在する場合にのみスキャンされます。 すべてのデータが必要ない場合は、クエリセットのキャッシュに問題がある可能性があります

場合によっては、すべてのデータを走査せずに、データが存在するかどうかだけを知りたい場合があります。この場合、if ステートメントを使用して判断するだけで、データは必要ありませんが、クエリセット全体が完全に実行され、データがキャッシュに入れられます。

りー

これを回避するには、exists() メソッドを使用してデータがあるかどうかを確認できます:

restaurant_set = Restaurant.objects.filter(cuisine="Indian")
# `if`语句会触发queryset的执行。
if restaurant_set:
    # 遍历时用的是cache中的数据
    for restaurant in restaurant_set:
        print(restaurant.name)
ログイン後にコピー

クエリセットが非常に大きい場合、キャッシュが問題になります

数千のレコードを処理する場合、それらを一度にメモリにロードするのは無駄です。さらに悪いことに、巨大なクエリセットによってシステム プロセスがロックされ、プログラムがクラッシュ寸前に陥る可能性があります。

データの走査中にクエリセット キャッシュが生成されないようにするには、 iterator() メソッドを使用してデータを取得し、データの処理後にそれを破棄します。

りー

もちろん、キャッシュの生成を防ぐために iterator() メソッドを使用すると、同じクエリセットを走査するときにクエリが繰り返し実行されることになります。したがって、 iterator() を使用するときは注意し、大規模なクエリセットを操作するときにコードがクエリを繰り返し実行しないようにしてください

クエリセットが大きい場合、if ステートメントが問題になります

前述したように、クエリセット キャッシュは if ステートメントと for ステートメントを組み合わせるのに強力であり、クエリセットでの条件付きループが可能になります。ただし、非常に大規模なクエリ セットの場合、クエリ セットのキャッシュは適していません。

最も簡単な解決策は、exists() を iterator() と組み合わせて使用​​し、2 つのデータベース クエリを使用してクエリセット キャッシュの使用を回避することです。

りー

より複雑な解決策は、Python の「高度な反復メソッド」を使用して、ループを開始する前に iterator() の最初の要素を調べてから、ループするかどうかを決定することです。

りー

不適切な最適化を防ぐ

クエリセットのキャッシュは、データベースに対するプログラムのクエリを減らすために使用され、通常の使用では、必要な場合にのみデータベースがクエリされるようになります。

プログラムのメモリ使用を最適化するには、exists() メソッドと iterator() メソッドを使用します。ただし、クエリセット キャッシュは生成されないため、追加のデータベース クエリが発生する可能性があります。

したがって、プログラムの速度が低下し始めた場合は、コードのどこにボトルネックがあるのか​​、役立つ小さな最適化があるかどうかを確認する必要があります。

以上がDjango の QuerySet を効果的に使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Dec 01, 2023 pm 02:25 PM

Django のバージョンを確認する手順: 1. ターミナルまたはコマンド プロンプト ウィンドウを開きます; 2. Django がインストールされていることを確認します Django がインストールされていない場合は、パッケージ管理ツールを使用してインストールし、 pip install django コマンドを入力します。 3. インストールが完了したら、python -m django --version を使用して Django のバージョンを確認できます。

Django フレームワークの長所と短所: 知っておくべきことすべて Django フレームワークの長所と短所: 知っておくべきことすべて Jan 19, 2024 am 09:09 AM

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

Django vs. Flask: Python Web フレームワークの比較分析 Django vs. Flask: Python Web フレームワークの比較分析 Jan 19, 2024 am 08:36 AM

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Nov 30, 2023 pm 03:08 PM

Django のバージョンを確認する方法: 1. コマンド ラインで確認するには、ターミナルまたはコマンド ライン ウィンドウで「python -m django --version」コマンドを入力します。 2. Python 対話型環境で確認するには、「import django」と入力します。 print(django.get_version())" code; 3. Django プロジェクトの設定ファイルを確認し、インストールされているアプリケーション情報を含む INSTALLED_APPS という名前のリストを見つけます。

Django のバージョンの違いは何ですか? Django のバージョンの違いは何ですか? Nov 20, 2023 pm 04:33 PM

違いは次のとおりです。 1. Django 1.x シリーズ: これは、バージョン 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、および 1.9 を含む、Django の初期バージョンです。これらのバージョンは主に基本的な Web 開発機能を提供します; 2. Django 2.x シリーズ: これは、2.0、2.1、2.2 およびその他のバージョンを含む Django の中期バージョンです; 3. Django 3.x シリーズ: これは最新バージョンですDjango シリーズ。バージョン 3.0、3 などを含む。

Django バージョンをアップグレードする方法: 手順と考慮事項 Django バージョンをアップグレードする方法: 手順と考慮事項 Jan 19, 2024 am 10:16 AM

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

Django はフロントエンドですか、それともバックエンドですか? Django はフロントエンドですか、それともバックエンドですか? Nov 21, 2023 pm 02:36 PM

バックエンドは django です。詳細: Django は主にバックエンド フレームワークですが、フロントエンド開発と密接に関連しています。 Django のテンプレート エンジン、静的ファイル管理、RESTful API などの機能を通じて、フロントエンド開発者はバックエンド開発者と協力して、強力でスケーラブルな Web アプリケーションを構築できます。

Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Jan 19, 2024 am 08:37 AM

Django は、迅速な開発とクリーンなメソッドを重視した Python で書かれた Web アプリケーション フレームワークです。 Django は Web フレームワークですが、Django がフロントエンドなのかバックエンドなのかという質問に答えるには、フロントエンドとバックエンドの概念を深く理解する必要があります。フロントエンドはユーザーが直接対話するインターフェイスを指し、バックエンドはサーバー側プログラムを指し、HTTP プロトコルを通じてデータと対話します。フロントエンドとバックエンドが分離されている場合、フロントエンドとバックエンドのプログラムをそれぞれ独立して開発して、ビジネス ロジックとインタラクティブ効果、およびデータ交換を実装できます。

See all articles