Django 다중 데이터 조작router 방법
공식 문서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가 여러 번 필요하고 매번 하나의 데이터베이스를 동기화하면 완성할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.