Django では、Django の ORM では簡単にアクセスできない可能性があるデータを取得または操作するために、ビュー内で生の SQL クエリを実行できます。 (オブジェクト リレーショナル マッピング)。 views.py の次のコードを考えてみましょう:
from app.models import Picture def results(request): all = Picture.objects.all() yes = Picture.objects.filter(vote='yes').count()
このコードは、「はい」の投票で Picture オブジェクトの数をカウントすることを目的としています。生の SQL クエリを使用してこれを実現するには、次のように進めることができます。
from django.db import connection def results(request): with connection.cursor() as cursor: cursor.execute("SELECT COUNT(*) FROM app_picture WHERE vote = 'yes'") row = cursor.fetchone() yes = row[0] # Extract the count from the first row all = Picture.objects.all() return render_to_response( "results.html", {"picture": picture, "all": all, "yes": yes}, context_instance=RequestContext(request), )
このコードは、データベースへの接続を開き、クエリを実行するためのカーソルを作成し、WHERE 句を使用して生の SQL クエリを実行します。フィルタは「はい」として投票し、結果の最初の行からカウントを抽出します。次に、通常の Django ORM クエリを実行してすべての Picture オブジェクトを取得し、最後に取得したデータを含む "results.html" テンプレートをレンダリングします。
生の SQL クエリを使用すると、実行される基になる SQL をより柔軟に制御できます。ただし、潜在的な SQL インジェクション攻撃を防ぐために、セキュリティへの影響を考慮し、適切な入力検証を確保することが重要です。
以上がDjango ビューで生の SQL クエリを使用してデータベース レコードを効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。