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 № 1Eu 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.