2011-02-09 5 views
4

여러 데이터베이스 백엔드를 사용할 장고 응용 프로그램을 개발 중입니다. 장고 응용 프로그램을 실행하는 컴퓨터에 sqlite 데이터베이스를두고 원격 mysql 데이터베이스에 동기화하고 싶습니다. 까다로운 부분은 응용 프로그램을 실행하는이 머신이 항상 인터넷에 연결되는 것은 아니므로 mysql 데이터베이스는 항상 사용할 수있는 것은 아니라는 점입니다. 응용 프로그램을 실행하는 컴퓨터가 여러 대 있으며, 각 컴퓨터에는 로컬 sqlite DB가 있지만 모두 동일한 원격 mysql DB를 사용합니다.Django 다중 데이터베이스 - 항상 사용할 수있는 것은 아닙니다.

아직 코드를 작성하지 않았지만 여기에 나와있는 내용이 있습니다. 삽입 또는 업데이트를 실행할 때마다 원격 데이터베이스를 사용할 수없는 경우를 제외하고 두 데이터베이스에 모두 쓰기를 원합니다.이 경우 원격 데이터베이스를 사용할 수있을 때 로컬 데이터베이스의 테이블에 SQL 문을 저장합니다.

데이터베이스 라우터로이 작업을 수행 할 수 있습니까? 아니면 각 db 문을 사용하여 수동으로 구현해야합니까?

PK에 관한 참고 사항 : 직접 관련이 없지만 반드시 물어보십시오. 기본 키는 각 시스템에서 로컬로 생성됩니다. mysql DB에는이 키에 대한 필드와 응용 프로그램의 각 인스턴스에 대한 고유 한 식별자가있는 필드가 있으며, 함께 고유 한 키를 제공합니다.

답변

3

Blog라는 모델이 있다고 가정하면 다음을 사용하여 로컬 및 원격으로 저장할 수 있습니다 (원격 데이터베이스에 대한 액세스를 구성했다고 가정).

blog = Blog('test') 
blog.save() #Assuming that sqlite is the default db 
try: 
    blog.save(using='mysql') 
except NoInternetConnection: 
    pass 

settings.py에서 'mysql'을 정의하고 구성했는지, 그리고 인터넷에 연결되어 있지 않은 경우를 처리하는지 확인하십시오.

사이드 노트 : 왜 실제로 이것을하고 싶은지 잘 모르겠습니다. 이것이 백업 목적이라면 표준 백업 절차를 사용합니다. 여러 데이터베이스 사용에 대한 자세한 내용은 http://docs.djangoproject.com/en/dev/topics/db/multi-db/#using-raw-cursors-with-multiple-databases

+0

응답 해 주셔서 감사합니다. 좋은 간단한 해결책입니다. 모델에 대해이 형식을 사용할 함수를 작성하겠습니다. 귀하의 측면에 대한 응답으로, 신뢰할 수있는 인터넷 연결이없는 키오스크 시스템에서 로컬로 실행되는 여러 응용 프로그램을 갖게 될 것입니다. 그런 다음 모든 컴퓨터의 데이터를 웹 서버에 집계해야합니다. – AgDude

+0

답을 원한다면 가장 환영합니다. 문제가 해결되면 문제를 해결할 수 있습니까? – DrDee

2

입니다. DrDee의 코드를 가져 와서 post_save 신호에 첨부했습니다 (도움말 +1).

@receiver(models.signals.post_save) #new signal decorator in Django 1.3 
def save_to_remote(sender,instance,using,**kwargs): 
    if using == 'default' and instance.__module__ == 'mymodel.myapp.models': 
     try: 
      instance.save(using='remote') 
     except: 
      pending_instance=Pending_Remote(
              pk_default=instance.pk, 
              model_default=instance.__class__.__name__ 
              ) 
      pending_instance.save() 

이렇게하면 원격 데이터베이스에 저장되지 않은 레코드도 저장됩니다. Pending_Remote 모델은 'myapp'에 있어서는 안됩니다.

관련 문제