Soporte de múltiples bases de datos en django.

De algún foro llegué a saber que se agrega soporte para múltiples bases de datos en Django en el nivel inferior, pero las apis de nivel superior aún no se han agregado.

¿Puede alguien decirme cómo se pueden lograr múltiples conexiones de base de datos en Django?

¿Alguien tiene alguna idea de cuándo Django admitirá completamente / oficialmente múltiples conexiones de base de datos?

Si simplemente necesitas conexiones múltiples, puedes hacer algo como esto:

from django.db import load_backend myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle' myConnection = myBackend.DatabaseWrapper({ 'DATABASE_HOST': '192.168.1.1', 'DATABASE_NAME': 'my_database', 'DATABASE_OPTIONS': {}, 'DATABASE_PASSWORD': "", 'DATABASE_PORT': "", 'DATABASE_USER': "my_user", 'TIME_ZONE': "America/New_York",}) # Now we can do all the standard raw sql stuff with myConnection. myCursor = myConnection.cursor() myCursor.execute("SELECT COUNT(1) FROM my_table;") myCursor.fetchone() 

La discusión más reciente que he visto fue en el subproceso de Django-developers de la Propuesta: API fácil de usar para soporte de múltiples bases de datos , que también tiene un ejemplo de una forma de usar múltiples bases de datos utilizando Managers en el mensaje original.

Si lees algunos de los muchos ( muchos ) hilos sobre este tema en django-dev, verás que lo que parece sencillo, no lo es. Si elige un caso de uso único, entonces parece fácil, pero tan pronto como comienza a generalizar de alguna manera, comienza a tener problemas.

Para usar el subproceso al que se hace referencia anteriormente como ejemplo, cuando dice “múltiples bases de datos”, ¿de cuál de los siguientes está hablando?

  • Todos los DB en la misma máquina bajo el mismo motor.
  • Todos los DB en la misma máquina, diferentes motores (por ejemplo, MySQL + PostgreSQL)
  • Un Master DB con N esclavos de solo lectura en diferentes máquinas.
  • Fragmentación de tablas en múltiples servidores de base de datos.

Va a necesitar

  • Claves foráneas a través de DBs
  • Uniones entre máquinas y / o motores.
  • etcétera etcétera.

Uno de los problemas con un ORM pulido como el de Django es que oculta todos esos detalles desordenados en un bonito trabajo de pintura. Continuar haciendo eso, pero luego agregar cualquiera de los anteriores, no es fácil ™.

Eric Florenzano escribió una muy buena publicación en el blog que le permite cierta compatibilidad con varias bases de datos en: Easy MultipleDatabase Support para Django .

Comienza creando un nuevo administrador personalizado que le permite especificar la configuración de la base de datos.

Hay una directiva “de uso” para consultas, guarda y elimina

https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database

Base de datos múltiple para elegir

Siempre necesitamos un nombre predeterminado, los nombres del rest dependen de usted.

 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mupltiple_datab_app1', 'USER': 'root', 'PASSWORD': 'admin', 'HOST': "", 'PORT': "", }, 'user1':{ 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mupltiple_datab_app2', 'USER': 'root', 'PASSWORD': 'admin', 'HOST': "", 'PORT': "", }, 'user2':{ 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mupltiple_datab_app3', 'USER': 'root', 'PASSWORD': 'admin', 'HOST':"" , 'PORT': "" , } } 

para sincronizar con una base de datos particular

 manage.py syncdb --database=user1 

Creo que tendrás que recurrir a “sql en bruto” .. algo ..
mira aquí: http://docs.djangoproject.com/en/dev/topics/db/sql/

necesita una “conexión” a su otra base de datos, si observa django/db/__init__.py alrededor de la línea 39 (en mi versión …)

connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)

Intenta sacarlo de ahí ..
PD: Realmente no he intentado esto ni nada … solo bash señalar la dirección general de lo que creo que podría resolver su problema.

El enfoque de Eric Florenzano funciona bien si todas sus bases de datos usan el mismo motor. Si tiene diferentes motores (Postgres y MSSQL en mi caso) se encontrará con muchos problemas en el código ORM (como por ejemplo, modelos / sql / where.py con la syntax SQL de la conexión predeterminada).

Si necesita que esto funcione, debe esperar al proyecto MultiDB de Alex Gaynor que está planeado para Django 1.2

Desde Django 1.2, soportará múltiples bases de datos. Consulte: http://docs.djangoproject.com/en/dev/topics/db/multi-db/ La versión 1.2 ahora está en versión beta