2012-09-19 3 views
0

Я пробовал с утра и прочитал все сообщения здесь и по всему о доступе к нескольким базам данных в django безрезультатно. Я ищу для доступа к другой базе данных на том же сервере, и я включил базы данных в settings.py с псевдонимами. Когда я пытаюсь использовать use() в наборе запросов, я получаю сообщение об ошибке, что глобальное имя «Имя объекта» не существует. Я использую postgresql 9.1 с django 1.4Доступ к нескольким базам данных в Django с использованием()

Есть ли что-нибудь, что мне нужно для импорта для этого? Он не работает для меня ни в консоли (python manage.py shell), ни в представлениях.

Вот настройки базы данных из settings.py:

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2',  # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'testing',  # Or path to database file if using sqlite3. 
    'USER': 'xxxx',      # Not used with sqlite3. 
    'PASSWORD': 'xxxx',     # Not used with sqlite3. 
    'HOST': 'localhost',     # Set to empty string for localhost. Not used with sqlite3. 
    'PORT': 'xxxx',       # Set to empty string for default. Not used with sqlite3. 
}, 
'app_data': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2',  # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'applications',  # Or path to database file if using sqlite3. 
    'USER': 'xxxx',      # Not used with sqlite3. 
    'PASSWORD': 'xxxx',     # Not used with sqlite3. 
    'HOST': 'localhost',     # Set to empty string for localhost. Not used with sqlite3. 
    'PORT': 'xxxx',       # Set to empty string for default. Not used with sqlite3. 
}, 
'ppp_data': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2',  # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'platform',  # Or path to database file if using sqlite3. 
    'USER': 'xxxx',      # Not used with sqlite3. 
    'PASSWORD': 'xxxx',     # Not used with sqlite3. 
    'HOST': 'localhost',     # Set to empty string for localhost. Not used with sqlite3. 
    'PORT': 'xxxx',       # Set to empty string for default. Not used with sqlite3. 
} 

}

Вот код из консоли:

>>> MyModel.objects.using('app_data').all() 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
NameError: name 'MyModel' is not defined 

Здесь ошибка с точки зрения:

NameError at /myapp/view 
global name 'MyModel' is not defined 

P аренда помощь!

Отредактировано: Just to give a little background У меня есть 3 разных приложения, работающих на одном сервере с разными базами данных, и я хотел получить доступ к записям в разных приложениях только для просмотра. 3 приложения - приложение, ppp и тестирование, и я пытаюсь получить доступ к данным приложения и ppp из моего тестового приложения.

+1

Похоже, вам не хватает импорта для 'MyModel' в ваших представлениях. –

+0

Каким будет синтаксис для импорта «MyModel» из другой базы данных на другой модели? – us1415

+0

Я попытался сделать 'из app.MyModel.models import *' в представлении в тестовом приложении, но не работает. – us1415

ответ

0

Мне пришлось добавить пути приложения для других приложений в файл wsgi.

import os, sys 
sys.path.append('/opt/www/test') 
sys.path.append('/opt/www/app') 
sys.path.append('/opt/www/ppp') 

Тогда я мог бы импортировать модели из других приложений

from pp_app.myapp.models import MyModel 
from pp_ppp.myapp.models import MyModel 

Тогда это позволило мне использовать метод, используя() в представлениях, чтобы получить записи:

data1 = MyModel.objects.using('app_data').all() 
data2 = MyModel.objects.using('ppp_data').all() 

Надежда это помогает кому-то другому.

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