Lo pregunté en el grupo de usuarios sin respuesta, así que pensé que lo intentaría aquí. Estoy tratando de configurar un administrador personalizado para conectarme a otra base de datos en el mismo servidor que mi conexión mysql predeterminada. He intentado siguiendo los ejemplos here y here pero no he tenido suerte. Obtengo una tupla vacía al devolver MyCustomModel.objects.all()
.Múltiples bases de datos en Django 1.0.2 con administrador personalizado
Esto es lo que tengo en 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
y esto es lo que tengo en 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
Pero si me quedo MyCustomModel.objects.all()
Puedo obtener una lista vacía.
soy bastante nuevo en esto así que no estoy seguro de si esto funciona con 1.0.2, voy a mirar en el código Manager para ver si puedo averiguar hacia fuera, pero sólo me pregunto si yo Estoy haciendo algo mal aquí.
ACTUALIZACIÓN: Esta ahora en Django tronco y será parte de la versión 1.2 http://docs.djangoproject.com/en/dev/topics/db/multi-db/
Esto viola algunas de las características esenciales de Django. La conexión de base de datos única está en su módulo de configuración. ¿Qué estás realmente tratando de hacer? Deberías considerar otros enfoques en lugar de romper a Django. –
Si miras los ejemplos que trato de usar, uno es de Adrian. Tengo una solución alternativa donde utilizo un módulo auxiliar y simplemente anulo la función de guardar en el modelo, pero esto es un poco complicado y no obtengo ningún beneficio de django. Si tiene alguna sugerencia sobre cómo agregar compatibilidad con múltiples bases de datos a una aplicación, por favor avíseme. –
¿Puedes ser un poco más paciente? Hay un proyecto GSOC en marcha en este momento que agrega soporte de múltiples bases de datos a Django. – ironfroggy