sql >> データベース >  >> RDS >> Mysql

djangoで内部参加を行う方法は?

    おそらく select_related> 、これを達成するための自然な方法です:

    pubs = publication.objects.select_related('country', 'country_state', 'city')
    

    結果のSQLは、 str(pubs.query)で確認できます。 、次の行に沿って出力されるはずです(例はpostgresバックエンドからのものです):

    SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ...  
    FROM "publication" 
    INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) 
    INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) 
    INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" ) 
    

    返されたカーソル値は、適切なORMモデルインスタンスに変換されるため、これらのパブリケーションをループすると、関連するテーブルの値に独自のオブジェクトを介してアクセスできます。ただし、事前に選択された転送関係に沿ったこれらのアクセスによって、余分なデータベースヒットが発生することはありません。

    {% for p in pubs %}
         {{ p.city.city_name}}  # p.city has been populated in the initial query
         # ...
    {% endfor %}
    


    1. なぜJOIN句とWHERE条件を使用するのですか?

    2. MySQL多対多選択

    3. SQLServerで正方形を計算する方法

    4. MariaDBで英数字以外の文字のみを含む行を返す2つの方法