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

标签 database django django-sites

假设我们有多个站点(使用 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/

相关文章:

Django django.db.utils.OperationalError : FATAL: remaining connection slots are reserved for non-replication superuser connections

python - 如何使用 Django 发布和检索 blob

python - 多个 django 站点上的单点登录

php - 用户相册和照片的数据库表结构

django邀请码app推荐?

database - 什么是数据库索引?

python - 运行Django的./manage.py syncdb时自动提示更新默认站点域名?

mysql - 1146 "app_name.django_site missing"

java - 如何取回以二进制形式存储在数据库中的java UUID

php - 使用 PHP 在表单提交时将数据库表值增加一个