gpt4 book ai didi

database - 每个 django 站点的不同数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:39 25 4
gpt4 key购买 nike

假设我们有多个站点(使用 Django 的站点框架)在同一个 Django 实例上运行。

MyModel.objects.filter(site_id=request.site, slug=slug)[0] 将来可能会成为开销。所以我想知道我是否可以为这个模型拆分数据库以便更快地查询。

所以如果request.site为1,运行

MyModel.objects.get(slug=slug)

将只查询 db1。

如果request.site为2,运行

MyModel.objects.get(slug=slug)

将只查询 db2。

我将从 View 的请求参数中获取 request.site,因为 site 的值将根据使用的子域动态确定:de、fr 等。

最佳答案

您可以创建自定义路由器来执行此操作:

例子:

def get_current_site():
SITE_ID = getattr(settings, 'SITE_ID', 1)
site_name = Site.objects.get(id=SITE_ID)
return site_name


DATABASE_ROUTERS = ['CustomDatabaseRouter',] #a setting that Django understands.

class CustomDatabaseRouter(object):

def db_for_read(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1']:
return 'db1'
if site_name in ['site2']:
return 'db2'
return 'default'

def db_for_write(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1']:
return 'db1'
if site_name in ['site2']:
return 'db2'
return 'default'

def allow_syncdb(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1'] and db == 'db1':
return True
if site_name in ['site2'] and db == 'db2':
return True
return False

你可以在这里阅读更多 https://docs.djangoproject.com/en/dev/topics/db/multi-db/

关于database - 每个 django 站点的不同数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com