Djangoアプリケーションでmasterデータベースと読み取りレプリカを使用してマルチデータベースを使用していますが、レプリケーションの遅延問題を避けるため、 DBを手動で設定する場所はほとんどありません。Django:prefetch_relatedに使用されるデータベースが親クエリと同じではありません
私はprefetch_relatedに使用するデータベースを指定する方法がわからないため、問題に直面しています。
たとえば、次のクエリでread_replica
DBのみを使用しますが、2つのクエリを実行すると、最初はread_replica
になり、2番目のクエリはdefault
DBになります。
users = UserProfile.objects.using('read_replica').prefetch_related('usermedia_set').filter(id__in=user_ids)
これは、このクエリの出力です:
SELECT @@ SQL_AUTO_IS_NULLは、 args = None
SELECT VERSION();引数=
ftmanager_userprofile
(ftmanager_userprofile
id
IN(33)FROMなしSELECT ...;。argsが=(33、)
はSQL_AUTO_IS_NULLをSELECT @@;引数=なし
SELECT VERSION(); 。引数=
ftmanager_usermedia
WHEREftmanager_usermedia
FROMなしSELECT ...
user_id
IN(33);引数の=(33、)
I S関連するチケットはDjango ticketsですが、using()
を内部クエリーセットに適用する方法はわかりません。