Django

Django ORM 上級

Raw SQL、custom managers、query expressions、database functions、atomic transactions、select_for_update、race conditions、database routers

28 面接問題·
Senior
1

Django で raw SQL を実行する際、Model.objects.raw() と connection.cursor() の主な違いは何ですか?

回答

Model.objects.raw() は自動的にマッピングされたモデルインスタンスを返し、属性アクセスやリレーションといった ORM の利点を維持します。connection.cursor() はタプルを持つ raw なデータベースカーソルを返し、特定のモデルに紐づかないクエリに対してより高い柔軟性を提供しますが、結果を手動で処理する必要があります。

2

Django でモデルに直接メソッドを追加するのではなく、custom Manager を作成する主な利点は何ですか?

回答

custom Manager はテーブルレベルのクエリロジックをカプセル化し、QuerySet とのメソッドチェーンを可能にし、そのモデルが使われるあらゆる場所でロジックを再利用できます。モデルメソッドは個々のインスタンスに対して動作します。Manager は get_queryset() でデフォルトの QuerySet を変更することもできます。

3

Django でカスタムメソッドのチェーンを可能にするために custom QuerySet をどのように実装しますか?

回答

チェーンを可能にするには、self またはフィルタリングされた QuerySet を返すメソッドを持つ、QuerySet を継承したクラスを作成します。次に Manager.from_queryset() で custom QuerySet を使うか、custom QuerySet を返す get_queryset() を持つカスタム Manager を定義します。これにより Model.objects.custom_method().filter() を呼び出せます。

4

race condition のリスクなしにデータベース内のカウンターをアトミックにインクリメントするには、どの Django の式を使いますか?

5

transaction.atomic() の機能は何ですか、また Django で例外をどのように扱いますか?

+25 面接問題

次の面接に向けてDjangoをマスター

すべての問題、flashcards、技術テスト、コードレビュー演習、面接シミュレーターにアクセス。

無料で始める