Django 다중 데이터 조작router 방법

3809 단어 djangoModelrouter
많은 문장을 뒤져 보니 이 문장이 가장 분명하게 말한 것 같다.
공식 문서https://docs.djangoproject.com/en/1.4/topics/db/multi-db/묘사
본고는 단지 러터를 사용하는 방법을 묘사할 뿐, 여기에는 한자 병음 데이터베이스를 예로 들 수 있다.
1 우선 settings에서.py 파일에 여러 데이터베이스 추가
DATABASES = {
    'default': 
    {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'default',                      # Or path to database file if using sqlite3.
        'USER': 'xxx',                      # Not used with sqlite3.
        'PASSWORD': 'xxx',                  # Not used with sqlite3.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
    },
    'pinyin':
    {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'pinyin',                      # Or path to database file if using sqlite3.
        'USER': 'xxx',                      # Not used with sqlite3.
        'PASSWORD': 'xxx',                  # Not used with sqlite3.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
    },    
             
}

2 모델 정의
class pinyin(models.Model):
    _database = 'pinyin'
    charact = models.CharField(max_length=4)
    pinyin = models.CharField(max_length=10)
    onset = models.CharField(max_length=2)  
    rime = models.CharField(max_length=4)   
    ucode = models.IntegerField()           
    freq = models.IntegerField()

그중에 모델pinyin은 추가 속성이 있습니다데이터베이스, 그는 모델이 연결될 데이터베이스를 설명했다.이 속성이 없으면, 기본 데이터베이스라도 기본값은default입니다.
3 작성router
router는 네 가지 방법이 있는데,
def db_for_read(self, model, **hints)      model             。
def db_for_write(self, model, **hints)      model             。
def allow_relation(self, obj1, obj2, **hints)   obj1   obj2            True ,       False ,           None 。
def allow_syncdb(self, db, model)     model       db          。
class AppRouter(object):
    def db_for_read(self, model, **hints):
        if hasattr(model, '_database'):
            return model._database
        return 'default'

    def db_for_write(self, model, **hints):
        if hasattr(model, '_database'):
            return model._database
        return  'default'


    def allow_relation(self, obj1, obj2, **hints):

        return None

    def allow_syncdb(self, db, model):
        if hasattr(model, '_database'):
            model_db = model._database
        else:
            model_db = 'default'
            
        if db == model_db:
            return True
        else:
            return False

4방향settings.py에 DATABASE 추가ROUTERS 
DATABASE_ROUTERS = ['path.to.AppRouter']

지금 완성됐습니다.
syncdb 작업을 할 때syncdb에 데이터베이스=dbase라는 인자가 있음을 주의해야 한다. 그 중에서 dbase의 기본값은default이다. 즉, 기본값은default 데이터베이스에 동기화된다.syncdb에 있을 때 AppRouter의allowsyncdb(self,db,모델) 방법은 그 중에서db는 매개 변수 dBase이고 모델은 동기화되는 모델입니다.True로 돌아가면 되고, False는 거부하고, None은 상관하지 않는다.여러 개의 데이터베이스가 있을 때syncdb가 여러 번 필요하고 매번 하나의 데이터베이스를 동기화하면 완성할 수 있다.

좋은 웹페이지 즐겨찾기