Подтвердить что ты не робот

Несколько баз данных и несколько моделей в django

У меня есть две базы данных и две модели: Admin и пользователь.

Я хочу синхронизировать свои модели с двумя базами данных; модель администратора к базе данных A и модель пользователя к базе данных B;

Если я устанавливаю путь модели к INSTALLED_APPS и syncdb, две модели будут синхронизироваться с базой данных по умолчанию.

если я устанавливаю базу данных в команде syncdb, например sync --database="B", и две модели будут синхронизироваться с базой данных B.

Итак, моя проблема в том, как мне синхронизировать две модели с двумя базами данных?

4b9b3361

Ответ 1

Я полностью согласен с @alecxe в использовании маршрутизатора базы данных. В настоящее время я использую один интерфейс администратора для управления несколькими базами данных. Обратите внимание, что аутентификация для всех баз данных хранится в базе данных по умолчанию, поэтому, когда вы выполняете syncdb (без аргументов).

Универсальный маршрутизатор баз данных

Я нашел эту реализацию чрезвычайно гибкой и полезной.

Settings.py

# Define the database manager to setup the various projects
DATABASE_ROUTERS = ['manager.router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {'mux_data': 't29_db', 
                         'T50_VATC':'t50_db'}

DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': 'fail_over',                    
            'USER': 'SomeUser',                      
            'PASSWORD': 'SomePassword',                  
            'HOST': '127.0.0.1',                     
            'PORT': '',                      
    },

    't29_db': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': 'mux_stage',                    
            'USER': 'SomeUser',                      
            'PASSWORD': 'SomePassword',                  
            'HOST': '127.0.0.1',                      
            'PORT': '',                      
    },

    't50_db': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', 
            'NAME': 't50_vatc',                    
            'USER': 'SomeUser',                      
            'PASSWORD': 'SomePassword',                 
            'HOST': '127.0.0.1',                     
            'PORT': '',                      
    },
}

Примеры моделей

# Create your models here.
class Card_Test(models.Model):
    name = models.TextField(max_length=100)
    description = models.TextField(max_length=200)
    units = models.TextField(max_length=500)
    result_tags = models.TextField(max_length=500)

    class Meta:
        app_label = 'mux_data'

    def __unicode__(self):
        return self.name

class Status_Type(models.Model):
    status = models.CharField(max_length=25)

    class Meta:
        app_label = 'mux_data'

    def __unicode__(self):
        return self.status

Ответ 2

Чтобы определить конкретные базы данных, используемые для определенных моделей, вам необходимо определить :

Самый простой способ использования нескольких баз данных - создать базу данных схема маршрутизации. Схема маршрутизации по умолчанию гарантирует, что объекты остаются ', Прикрепленные к их исходной базе данных (то есть объект, полученный из база данных foo будет сохранена в той же базе данных). По умолчанию схема маршрутизации гарантирует, что если база данных не указана, все запросы вернуться к базе данных по умолчанию.

См. этот фрагмент в качестве примера: http://djangosnippets.org/snippets/2687/

Также смотрите: