0

現在、現在のプロジェクトで非常に頻繁に呼び出される次のコードを最適化しようとしています

Hit(link     = self.link,
    ip       = self.request.META['REMOTE_ADDR'],
    referrer = self.request.META['HTTP_REFERER'],
    country  = Country.objects.filter(shorthand=country_code).get()
).save()

これにより、次の SQL クエリが生成されます (テスト目的のための SQLite バックエンド)。

SELECT * FROM "ucp_country" WHERE "ucp_country"."shorthand" = 'DE';
INSERT INTO "ucp_hit" ("link_id", "ip", "referrer", "country_id")
VALUES (1, '127.0.0.1', 'http://127.0.0.1:8000/ucp/manage_links', 83);

ここDEで、 は国コードと83その ID であり、SELECT クエリによって返されます。

クエリを単一のクエリにマージするように Django に指示する方法はありますか? 不明な国コードが渡されたときに例外が発生することは認識しています。投稿されたコードは、問題を説明する目的でのみ記載されています。私は次のようなことを考えています:

INSERT INTO "ucp_hit" ("link_id", "ip", "referrer", "country_id")
VALUES (1, '127.0.0.1', 'http://127.0.0.1:8000/ucp/manage_links',
        (SELECT "id" FROM "ucp_country" WHERE "ucp_country"."shorthand" = 'DE'));

要求された国が見つからない場合、クエリは を挿入することになっていますNULL。何らかの方法でそのようなクエリを生成するように Django に指示することは可能ですか?

4

0 に答える 0