我从今天早上起就一直在努力阅读所有关于访问django中多个数据库的帖子以及所有帖子都没有用。我想在同一台服务器上访问另一个数据库,我已将settings.py中的数据库包含在别名中。当我试图在查询集中使用using()时,我收到一个错误,即全局名称'Objectname'不存在。我使用postgresql 9.1和django 1.4
有什么我需要导入才能使用吗?它在控制台(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
请帮忙!
编辑:为了给出一点背景我在一台服务器上运行3个不同的应用程序,使用不同的数据库,我想访问不同应用程序中的记录,仅供查看。 3个应用程序是app,ppp和测试,我试图从我的测试应用程序访问app和ppp数据。
答案 0 :(得分: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
然后这允许我在视图中使用using()方法来获取记录:
data1 = MyModel.objects.using('app_data').all()
data2 = MyModel.objects.using('ppp_data').all()
希望这有助于其他人。