每个django站点的不同数据库 [英] Different database for each django site
问题描述
假设我们在同一个django实例上运行多个站点(使用站点框架的Django)。
Suppose we have multiple sites (using sites-framework of Django) running on the same django instance.
MyModel.objects.filter site_id = request.site,slug = slug)[0]
将来可能是一个开销。所以我想知道我是否可以拆分这个模型的数据库以便更快的查询。
MyModel.objects.filter(site_id=request.site, slug=slug)[0]
might be an overhead in the future. So I was wondering if I could split the databases for this model(s) for querying faster.
所以如果 request.site
是1,运行
MyModel.objects.get(slug=slug)
只会查询db1。
如果 request.site
是2,运行
MyModel.objects.get(slug=slug)
只会查询db2。
我将获得请求。从站点视图的请求参数中的站点将根据所使用的子域动态确定:de,fr等。
I will be getting request.site from the request parameter of the view as value of site will be dynamically determined according to the subdomain used: de, fr, etc.
推荐答案
您可以创建一个自定义路由器来执行此操作:
You may create a custom router to do this:
示例:
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/
You can readup more here https://docs.djangoproject.com/en/dev/topics/db/multi-db/
这篇关于每个django站点的不同数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!