Посочете база данни, която да използвате в 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.

Трябва ли да дефинирам маршрут на базата данни? изглежда, че трябва да направя това само за персонализирано четене/запис.

Благодаря

АКТУАЛИЗАЦИЯ:

В django docs се казва Схемата за маршрутизиране по подразбиране гарантира, че ако база данни не е посочена, всички заявки се връщат към базата данни по подразбиране.

Така че предполагам, че действителният ми въпрос е как да посоча база данни, която да използвам за моите заявки?


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


Отговори (1)


Това е изрично посочено в документи

Настройката DATABASES трябва да конфигурира база данни по подразбиране; произволен брой допълнителни бази данни също могат да бъдат посочени.

Ако концепцията за база данни по подразбиране няма смисъл в контекста на вашия проект, трябва да внимавате винаги да указвате базата данни, която искате да използвате.

Както във вашия втори пример базата данни по подразбиране не е конфигурирана

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

когато осъществявате достъп до вашите данни без указана база данни, се използва django.db.backends.dummy бекенд, който се оплаква от вашата конфигурация с ImproperlyConfigured грешка.

Пример за конфигуриране на използване на множество бази данни с рутери за бази данни може да бъде намира се в документи

актуализация

Грешката в заявката за съвпадение на сайт е по напълно различни причини и е друг въпрос. Отговорете тук, тъй като е дубликат на много други: тъй като вашите mysql1 и mysql2 dbs имат различно съдържание, вторият изглежда не е правилно конфигуриран. Вижте заявката за съвпадение на сайт не съществува.

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? Има ли начин за достъп до множество бази данни, сякаш всички таблици са в една db? - person neghez; 14.11.2013