Как я могу использовать отдельную базу данных для каждого приложения в Django - PullRequest
3 голосов
/ 01 июля 2011

У меня есть app1 и app2, я хочу app1 использовать db1, а app2 использовать db2

подход, который я нашел, заключается в использовании маршрутизатора базы данных, немного сложнее

Я хочу знать, есть ли простой способ?

Могу ли я просто настроить его в settings.py

Ответы [ 2 ]

3 голосов
/ 19 декабря 2012

Я думаю, что правильный ответ здесь: http://diegobz.net/2011/02/10/django-database-router-using-settings. Если у вас много приложений и вы хотите отдельную базу данных для каждого, вы ставите

DATABASE_APPS_MAPPING = {'app1':'db1', 'app2':'db2', 'app3':'db3', 'app4':'db4'}
DATABASE_ROUTERS += ['DatabaseAppsRouter']

в settings.py.

3 голосов
/ 01 июля 2011

Нет.Правильный способ - использовать роутеры.Это очень просто.См. MyAppRouter в документации Django: https://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example:

class MyAppRouter(object):
    """A router to control all database operations on models in
    the myapp application"""

    def db_for_read(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'myapp':
            return 'other'
        return None

    def db_for_write(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'myapp':
            return 'other'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        "Allow any relation if a model in myapp is involved"
        if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
            return True
        return None

    def allow_syncdb(self, db, model):
        "Make sure the myapp app only appears on the 'other' db"
        if db == 'other':
            return model._meta.app_label == 'myapp'
        elif model._meta.app_label == 'myapp':
            return False
        return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...