/ / Acessando vários bancos de dados no Django com o using () - django, django-models

Acessando vários bancos de dados no Django com o using () - django, django-models

Eu tenho tentado desde hoje de manhã e tenholeia todos os posts aqui e tudo sobre como acessar vários bancos de dados no django sem sucesso. Eu estou olhando para acessar outro banco de dados no mesmo servidor e incluí os bancos de dados no settings.py com aliases. Quando estou tentando usar o using () no queryset estou recebendo um erro que o nome global "Objectname" não existe. Eu estou usando o postgresql 9.1 com o django 1.4

Existe alguma coisa que eu preciso importar para que isso funcione? Não funciona para mim nem no console (python manage.py shell) nem nas views.

Aqui está a configuração do banco de dados de 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.
}

}

Aqui está o código do console:

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

Aqui está o erro da visão:

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

Por favor ajude!

Editado: Só para dar um pouco de experiência, tenho três aplicativos diferentes em execução em um servidor com bancos de dados diferentes e queria acessar registros em diferentes aplicativos apenas para visualização. Os três aplicativos são app, ppp e testing e estou tentando acessar os dados do aplicativo e do ppp do meu aplicativo de teste.

Respostas:

0 para resposta № 1

Eu tive que acrescentar os caminhos de aplicativos para outros aplicativos para o arquivo wsgi.

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

Então eu poderia importar os modelos de outros aplicativos

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

Então isso me permitiu usar o método using () nas views para obter os registros:

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

Espero que isso ajude alguém.