【发布时间】:2016-10-19 19:10:55
【问题描述】:
我在我的 Django 应用程序中使用了一个多数据库,其中包含一个主数据库和一个只读副本,但为了避免复制滞后问题,路由器总是使用默认数据库,除了我手动设置数据库的少数地方。
我遇到了一个问题,因为我不知道如何指定用于 prefetch_related 的数据库。
例如,我希望下一个查询仅使用 read_replica DB,但它执行 2 个查询,第一个查询按预期转到 read_replica,第二个转到 default DB。
users = UserProfile.objects.using('read_replica').prefetch_related('usermedia_set').filter(id__in=user_ids)
这是此查询的输出:
选择@@SQL_AUTO_IS_NULL; args=无
选择版本(); args=无
SELECT ... FROM
ftmanager_userprofileWHERE (ftmanager_userprofile.idIN (33); args=(33,)选择@@SQL_AUTO_IS_NULL; args=无
选择版本(); args=无
选择...从
ftmanager_usermediaWHEREftmanager_usermedia.user_idIN (33); args=(33,)
我在Django tickets 上看到了相关票证,但我不明白如何将using() 应用于内部查询集。
【问题讨论】:
标签: python django orm database-replication