Укажите базу данных для использования в Django

Мне нужно использовать несколько баз данных для моего проекта django. Приложение отлично работает, когда есть только одна база данных:

В настройках.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',                     
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',                     
        'PORT': 3306,    
    },

Но если бы я добавил больше баз данных из того же движка:

DATABASES = {
    'default':{},
    'mydb1': {
            'ENGINE': 'django.db.backends.mysql', 
            'NAME': 'mydb1',    
            'USER': 'root',
            'PASSWORD': '',
            'HOST': '127.0.0.1',                    
            'PORT': 3306,                  
        },
   'mydb2': {
            'ENGINE': 'django.db.backends.mysql', 
            'NAME': 'mydb2',           
            'USER': 'root',
            'PASSWORD': '',
            'HOST': '127.0.0.1',             
            'PORT': 3306,                   
                }
    }

это дает мне следующую ошибку:

ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

Кроме того, я пробовал:

DATABASES = {
        'default': {
                'ENGINE': 'django.db.backends.mysql', 
                'NAME': 'mydb1',    
                'USER': 'root',
                'PASSWORD': '',
                'HOST': '127.0.0.1',                    
                'PORT': 3306,                  
            },
       'mydb2': {
                'ENGINE': 'django.db.backends.mysql', 
                'NAME': 'mydb2',           
                'USER': 'root',
                'PASSWORD': '',
                'HOST': '127.0.0.1',             
                'PORT': 3306,                   
                    }
        }

Он видит только mydb1, а не mydb2, когда я попытался запросить mydb2, он дает мне:

DoesNotExist: Site matching query does not exist.

Нужно ли определять маршрут базы данных? кажется, мне нужно сделать это только для индивидуального чтения/записи.

Спасибо

ОБНОВИТЬ:

В документах django говорится, что схема маршрутизации по умолчанию гарантирует, что, если база данных не указана, все запросы возвращаются к базе данных по умолчанию.

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


person neghez    schedule 13.11.2013    source источник


Ответы (1)


Это явно указано в документах.

Параметр DATABASES должен настроить базу данных по умолчанию; также может быть указано любое количество дополнительных баз данных.

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

Как и во втором примере, база данных по умолчанию не настроена.

DATABASES = {
     'default':{},
...
}

когда вы получаете доступ к своим данным без указанной базы данных, используется бэкэнд django.db.backends.dummy, который жалуется на вашу конфигурацию с ошибкой ImproperlyConfigured.

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

обновить

Ошибка запроса соответствия сайта возникает по совершенно другим причинам, и это уже другой вопрос. Ответьте здесь, поскольку он дублирует многие другие: поскольку ваши базы данных mysql1 и mysql2 имеют разное содержимое, второй, похоже, неправильно настроен. См. запрос на соответствие сайта не существует.

person alko    schedule 13.11.2013
comment
Второй пример, который django docs дает для нескольких баз данных, оставил его пустым: docs. djangoproject.com/en/1.5/topics/db/multi-db - person neghez; 14.11.2013
comment
Я могу указать базу данных для обновления, когда syncdb --databases=mydb2, но как мне указать базу данных при доступе к данным? Это делается в model.py? - person neghez; 14.11.2013
comment
@zyenge см. последнюю ссылку на документы в моем ответе, это невозможно сделать в модели, это делается с помощью настройки DATABASE_ROUTERS - person alko; 14.11.2013
comment
Итак, настроенный db_for_read/write или нет, DATABASE_ROUTERS должен использоваться при наличии нескольких баз данных? Это был мой изначальный вопрос... - person neghez; 14.11.2013
comment
@zyenge Извините, я не понимаю смысла So customized db_for_read/write or not, a database_route must be used when there are multiple databases? И вижу обновления о сайте, который не определен. - person alko; 14.11.2013
comment
Извините, я не ясно выразился в вопросе. Я думал, что DATABASE_ROUTERS используется, когда у меня есть несколько баз данных в моей серверной части, и я хочу указать базу данных для записи и другую для чтения. Но если все, что мне нужно, это получить доступ ко всем моим базам данных, мне не нужно настраивать, какую из них читать, а какую записывать, нужно ли мне еще определять DATABASE_ROUTERS? Есть ли способ получить доступ к нескольким базам данных, как будто все таблицы находятся в одной базе данных? - person neghez; 14.11.2013