Vários bancos de dados em Django 1.0.2 com gerente de costume

votos
6

Eu perguntei isso no grupo de usuários sem resposta, então eu pensei que eu iria tentar aqui. Eu estou tentando configurar um gerenciador customizado para conectar a outro banco de dados no mesmo servidor como minha conexão mysql padrão. Eu tentei seguir os exemplos aqui e aqui , mas não tiveram sorte. Recebo uma tupla vazia quando retornar MyCustomModel.objects.all().

Aqui está o que eu tenho em manager.py

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 

e aqui é o que eu tenho em 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 

Mas se eu corro MyCustomModel.objects.all()eu recebo uma lista vazia.

Eu sou muito novo neste tipo de coisas, então eu não tenho certeza se isso funciona com 1.0.2, eu vou olhar para o código Manager para ver se eu posso descobrir isso, mas eu estou apenas querendo saber se eu estou fazendo algo errado aqui.

UPDATE: Este agora no tronco Django e fará parte da versão 1.2 http://docs.djangoproject.com/en/dev/topics/db/multi-db/

Publicado 22/04/2009 em 21:26
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

Você pode querer falar com Alex Gaynor como ele está adicionando suporte MultiDB e sua Pegged para possível lançamento em Django 1.2 . Tenho certeza que ele gostaria de receber feedback e sugestões daqueles que estão indo usar MultiDB. Há discussões sobre isso no Django-desenvolvedores lista Mainling. Seu ramo MultiDB pode até ser útil, eu não tenho certeza.

Desde que eu acho que você provavelmente não pode esperar e se o ramo MultiDB não é utilizável, aqui estão as suas opções.

  • Siga Eric Fluxos método , tendo em conta que não é suportado e novos lançada do Django podem quebrá-lo. Além disso, alguns comentários sugerem a sua já foi quebrado . Este vai ser hacky.
  • Sua outra opção seria a utilização de um método de acesso de banco de dados totalmente diferente para um de seus bancos de dados. Talvez SQLAlchemy para um e, em seguida, Django ORM. Vou pela suposição de que um é provável que seja mais Django centric eo outro é um banco de dados legado.

Para resumir. Eu acho que hackers MultiDB em Django é provavelmente a maneira errada de ir a menos que seu dispostos a manter-se com a manutenção de seus hacks mais tarde. Portanto, eu acho que um outro ORM ou banco de dados de acesso iria dar-lhe a rota mais limpa como então você não está indo para fora com recursos suportados e no final do dia, é tudo apenas Python.

Respondeu 31/07/2009 em 21:04
fonte usuário

votos
1

Minha empresa tem tido sucesso usando vários bancos de dados, seguindo de perto este post: http://www.eflorenzano.com/blog/post/easy-multi-database-support-django/

Respondeu 31/07/2009 em 18:33
fonte usuário

votos
0

Isso provavelmente isn t the answer your looking for, but itprovavelmente é melhor se você mover tudo o que precisa em um banco de dados.

Respondeu 29/04/2009 em 09:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more