/ / Accéder à plusieurs bases de données dans Django en utilisant () - django, django-models

Accéder à plusieurs bases de données dans Django avec using () - django, django-models

J'essaie depuis ce matin et j'ailire tous les articles ici et partout sur l'accès à plusieurs bases de données dans django en vain. Je cherche à accéder à une autre base de données sur le même serveur et j'ai inclus les bases de données dans le settings.py avec des alias. Lorsque j'essaie d'utiliser le using () dans le jeu de requêtes, j'obtiens une erreur indiquant que le nom global "Objectname" n'existe pas. J'utilise PostgreSQL 9.1 avec Django 1.4

Y a-t-il quelque chose que je dois importer pour que cela fonctionne? Cela ne fonctionne pas pour moi ni dans la console (shell python manage.py) ni dans les vues.

Voici la configuration de la base de données à partir 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.
}

}

Voici le code de la console:

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

Voici l'erreur de la vue:

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

S'il vous plaît aider!

Édité: Juste pour donner un peu de contexte, j'ai 3 applications différentes fonctionnant sur un serveur avec différentes bases de données et je voulais accéder aux enregistrements de différentes applications juste pour les visualiser. Les 3 applications sont app, ppp et testing et j'essaie d'accéder aux données app et ppp depuis mon application de test.

Réponses:

0 pour la réponse № 1

J'ai dû ajouter les chemins des applications pour d'autres applications au fichier wsgi.

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

Ensuite, je pourrais importer les modèles à partir d'autres applications

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

Ensuite, cela m'a permis d'utiliser la méthode using () dans les vues pour obtenir les enregistrements:

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

J'espère que ceci aide quelqu'un d'autre.