【发布时间】:2020-07-12 08:44:26
【问题描述】:
在我的 Django 项目中,我有几个应用程序,其中一个是 email_lists,该应用程序执行大量数据处理,从模型 Customers 读取数据。在我的生产环境中,我有两个数据库:default 和 read-replica。我希望针对replica-set 数据库进行特定模块中的所有查询。
如果我明确告诉查询这样做,我可以这样做:
def get_customers(self):
if settings.ENV == 'production':
customers = Customer.objects.using('read-replica').filter()
else:
customers = Customer.objects.filter()
但是这个模块有超过 100 个对Customer 和其他模型的查询。我也对以下关系有疑问:
def get_value(self, customer):
target_sessions = customer.sessions.filter(status='open')
carts = Cart.objects.filter(session__in=target_sessions)
这个想法是我想避免写作:
if settings.ENV == 'production':
instance = Model.objects.using('read-replica').filter()
else:
instance = Model.objects.filter()
对于每个查询。我的项目中还有其他地方需要从 default 数据库中读取,因此它不能是全局设置。我只需要使用副本读取此模块或文件。
这在 Django 中是否可行,有什么快捷方式吗?
谢谢
【问题讨论】:
标签: django postgresql django-models django-database