2009-04-22 5 views
6

사용자 그룹에서 응답없이이 질문을 했으므로 여기에서 시도 할 것이라고 생각했습니다. 내 기본 mysql 연결과 동일한 서버에 다른 데이터베이스 에 연결하기 위해 사용자 정의 관리자를 설정하려고합니다. 나는 herehere 예제를 따라 을 시도했지만 운이 없었습니다. 반환 할 때 빈 튜플이 생깁니다. MyCustomModel.objects.all(). 여기 Django 1.0.2의 다중 데이터베이스 사용자 정의 관리자

내가
from django.db import models 
from django.db.backends.mysql.base import DatabaseWrapper 
from django.conf import settings 
class CustomManager(models.Manager): 
    """ 
    This Manager lets you set the DATABASE_NAME on a per-model basis. 
    """ 
    def __init__(self, database_name, *args, **kwargs): 
     models.Manager.__init__(self, *args, **kwargs) 
     self.database_name = database_name 
    def get_query_set(self): 
     qs = models.Manager.get_query_set(self) 
     qs.query.connection = self.get_db_wrapper() 
     return qs 
    def get_db_wrapper(self): 
     # Monkeypatch the settings file. This is not thread-safe! 
     old_db_name = settings.DATABASE_NAME 
     settings.DATABASE_NAME = self.database_name 
     wrapper = DatabaseWrapper() 
     wrapper._cursor(settings) 
     settings.DATABASE_NAME = old_db_name 
     return wrapper 

manager.py

에서 무엇을하고 여기에 내가 models.py에있는 것입니다 :

from django.db import models 
from myproject.myapp.manager import CustomManager 
class MyCustomModel(models.Model): 
    field1 = models.CharField(max_length=765) 
    attribute = models.CharField(max_length=765) 
    objects = CustomManager('custom_database_name') 
    class Meta: 
     abstract = True 

을하지만 MyCustomModel.objects.all()를 실행하면 나는 빈 목록을 얻을.

1.0.2와 작동하는지 잘 모르겠지만 관리자 코드를 조사 할 것입니다. 알아낼 수 있는지 궁금합니다. 여기 뭔가 잘못하고 있어요.

UPDATE : 이 이제 장고 트렁크와 1.2 릴리스 http://docs.djangoproject.com/en/dev/topics/db/multi-db/

+0

이것은 장고의 몇 가지 필수 기능을 위반합니다. 단일 데이터베이스 연결은 설정 모듈에 있습니다. 너 정말로 무엇을하려고하는거야? 장고를 깨기보다는 다른 접근법을 고려해야합니다. –

+0

내가 사용하려고하는 예를 보면, 하나는 애드리안 출신이다. 나는 도우미 모듈을 사용하고 모델의 저장 기능을 오버라이드하는 해결책을 가지고있다. 그러나 이것은 약간의 해킹이고 나는 장고 혜택을 얻지 못한다. 앱에 여러 데이터베이스 지원을 추가하는 방법에 대한 제안 사항이 있으면 알려 주시기 바랍니다. –

+0

좀 더 환자가 될 수 있습니까? 장고에 여러 데이터베이스 지원을 추가하는 GSOC 프로젝트가 진행 중입니다. – ironfroggy

답변

4

당신은 그가 MultiDB 지원과를 추가로 Alex Gaynor 이야기 할 수는 Django 1.2 가능한 릴리스 말뚝을 박는 다. MultiDB를 사용하게 될 사람들의 피드백과 의견을 감사하게 생각합니다. django-developers 주요 목록에 이에 대한 토론이 있습니다. 그의 MultiDB 지점은 유용 할 수도 있습니다. 확실하지 않습니다.

아마도 MultiDB 브랜치를 사용할 수 없다면 기다릴 수 없으므로 여기에 옵션이 있습니다.

  • 을 따르십시오. 지원되지 않고 새로운 Django가 릴리스 됨으로써 마음에 들지 않을 수 있습니다. 또한 일부 의견은 already been broken을 제안합니다. 이것은 해킹 될 것입니다.
  • 다른 옵션은 데이터베이스 중 하나에 완전히 다른 데이터베이스 액세스 방법을 사용하는 것입니다. 아마도 SQLAlchemy을 하나의 Django ORM으로 만듭니다. 저는 장고 중심적인 경향이 있고 다른 하나는 레거시 데이터베이스라고 생각합니다.

요약하면. 제 생각에 MultiDB를 장고로 해킹하는 것은 아마도 나중에 해킹을 유지할 준비가되어 있지 않은 한 잘못된 길일 것입니다. 따라서 다른 ORM 또는 데이터베이스 액세스는 지원되는 기능을 사용하지 않고 가장 마지막에 Python을 사용하여 가장 깨끗한 경로를 제공한다고 생각합니다.

+1

이것은 지금 트렁크에 커밋되었고 docs도 사용 가능해 보입니다. http://docs.djangoproject.com/en/dev/topics/db/multi-db/ –

+0

예. 확실히 가지고 있고 그것의 굉장한 : D –

0

의 일부가 될 것입니다 당신이 하나 개의 데이터베이스에 필요한 모든 것을 이동하는 경우이 아마 아마 가장 t the answer your looking for, but it들 외설.

+0

freeradius와 같은 다른 응용 프로그램의 데이터에 액세스하려고하기 때문에 고맙습니다. –

1

우리 회사는 밀접하게이 블로그 게시물에 따라 여러 데이터베이스를 사용하여 성공을했다 : http://www.eflorenzano.com/blog/post/easy-multi-database-support-django/

+0

고마워요. Bluu 전 이걸 본 것 같아요. 시도했는지 모르겠어요. 내 응용 프로그램은 자신의 mysql 연결이있는 도우미 메서드로 작업하므로 v2를 기다려야합니다. –

관련 문제