사용자 그룹에서 응답없이이 질문을 했으므로 여기에서 시도 할 것이라고 생각했습니다. 내 기본 mysql 연결과 동일한 서버에 다른 데이터베이스 에 연결하기 위해 사용자 정의 관리자를 설정하려고합니다. 나는 here과 here 예제를 따라 을 시도했지만 운이 없었습니다. 반환 할 때 빈 튜플이 생깁니다. 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/
이것은 장고의 몇 가지 필수 기능을 위반합니다. 단일 데이터베이스 연결은 설정 모듈에 있습니다. 너 정말로 무엇을하려고하는거야? 장고를 깨기보다는 다른 접근법을 고려해야합니다. –
내가 사용하려고하는 예를 보면, 하나는 애드리안 출신이다. 나는 도우미 모듈을 사용하고 모델의 저장 기능을 오버라이드하는 해결책을 가지고있다. 그러나 이것은 약간의 해킹이고 나는 장고 혜택을 얻지 못한다. 앱에 여러 데이터베이스 지원을 추가하는 방법에 대한 제안 사항이 있으면 알려 주시기 바랍니다. –
좀 더 환자가 될 수 있습니까? 장고에 여러 데이터베이스 지원을 추가하는 GSOC 프로젝트가 진행 중입니다. – ironfroggy