2013-11-13 10 views
1

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

В setting.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. 

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

Благодаря

UPDATE:

В Джанго документации, он говорит: «схема маршрутизации по умолчанию гарантирует, что, если база данных не указано, все запросы попадают обратно в базу данных по умолчанию».

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

ответ

1

Он explicetely заявил в docs

The DATABASES setting must configure a default database; any number of additional databases may also be specified.

If the concept of a default database doesn’t make sense in the context of your project, you need to be careful to always specify the database that you want to use.

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

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

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

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

обновление

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

+0

Второй пример Джанго Документов для нескольких баз данных остались пустыми: https://docs.djangoproject.com/en/1.5/topics/db/multi-db/ – zyenge

+0

@zyenge да, вы правильно, фиксированными мой ответ – alko

+0

Я могу указать базу данных для обновления, когда syncdb --databases = mydb2, но как я могу указать базу данных при доступе к данным? Это сделано в model.py? – zyenge

Смежные вопросы