2012-01-17 5 views
1

기본 데이터베이스에 대한 쿼리 집합을 사용할 수 있습니다. 하지만 다른 데이터베이스에 대한 쿼리 집합을 사용할 때 예외가 발생합니다.django에서 여러 데이터베이스에 대한 쿼리 집합을 사용할 수 없습니다

내 응용 프로그램에서는 두 개의 데이터베이스를 사용합니다. SQLite는과 MySQL은 그 어떤 예외를 throw하지 않는 내가 쿼리 첫 번째 데이터베이스에 설정된 사용하십시오

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

. 두 번째 데이터베이스를 사용하는 동안 throwing table을 사용할 수 없습니다. 응답 톰, 에 대한

TemplateSyntaxError at /abc/xyz/ 

Caught DatabaseError while rendering: no such table: second.tablename 

Request Method:  GET 
Request URL: http://127.0.0.1:8000/xxx/yyyy/?q=abcd 
Django Version:  1.3.1 
Exception Type:  TemplateSyntaxError 
Exception Value:  

Caught DatabaseError while rendering: no such table: second.tablename 
+1

데이터베이스에 테이블이 있는지 확인 하시겠습니까? – dm03514

+1

라우터 (https://docs.djangoproject.com/en/dev/topics/db/multi-db/#using-routers)를 만들었습니까? 테이블이 데이터베이스 중 하나에있을 가능성이 큽니다 (쿼리하려고 할 때 장고가 던지는 것보다는). – Tom

+0

database1에는 다른 테이블이 있고 database2에는 다른 테이블이 있습니다. – sreekanth

답변

1

덕분에 내가 수동으로 두 번째 데이터베이스를 시도하고 나를 위해 일했다.

$model_seconddb.modelname.objects.using('seconddatabasename').filter(name='xxx') 

모든 테이블이 두 데이터베이스에 모두 없을 때 사용할 수 있습니다.

기본 데이터베이스를 사용하려는 경우 (사용)을 사용할 필요가 없습니다. 기본 데이터베이스에서 직접 쿼리합니다.

0

최고의 옵션은 여러 DB를 관리하는 라우팅을 사용한다 장고에 여러 데이터베이스를 사용하려면, 여기 문서 : 여기

https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#topics-db-multi-db-routing

다큐먼트에서 전체 예 :

class AuthRouter(object): 
""" 
A router to control all database operations on models in the 
auth application. 
""" 
def db_for_read(self, model, **hints): 
    """ 
    Attempts to read auth models go to auth_db. 
    """ 
    if model._meta.app_label == 'auth': 
     return 'auth_db' 
    return None 

def db_for_write(self, model, **hints): 
    """ 
    Attempts to write auth models go to auth_db. 
    """ 
    if model._meta.app_label == 'auth': 
     return 'auth_db' 
    return None 

def allow_relation(self, obj1, obj2, **hints): 
    """ 
    Allow relations if a model in the auth app is involved. 
    """ 
    if obj1._meta.app_label == 'auth' or \ 
     obj2._meta.app_label == 'auth': 
     return True 
    return None 

def allow_migrate(self, db, app_label, model_name=None, **hints): 
    """ 
    Make sure the auth app only appears in the 'auth_db' 
    database. 
    """ 
    if app_label == 'auth': 
     return db == 'auth_db' 
    return None 

쿼리에서 데이터베이스를 지정하지 않으면 Django는 테이블 이름을 기반으로 올바른 데이터베이스를 사용합니다.

희망 도움말 :