mysqlclient mac python django database-connection

python - mac - Soporte de base de datos mĂșltiple en django



mysqlclient django download (10)

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

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

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

¿Alguien tiene alguna idea de cuándo Django admitirá total / oficialmente varias conexiones de bases de datos?


Creo que deberás recurrir a "raw sql" ... algo así ...
mira aquí: http://docs.djangoproject.com/en/dev/topics/db/sql/

necesitas una "conexión" a tu otra base de datos, si miras django/db/__init__.py alrededor de la línea 39 (en mi versión ...)

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

intenta llevarlo desde allí ...
PD. Realmente no he intentado esto ni nada ... solo intento apuntar en la dirección general de lo que creo que podría resolver su problema.


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

Para usar el hilo mencionado anteriormente como ejemplo, cuando dices "múltiples bases de datos", ¿de cuál de las siguientes preguntas estás hablando?

  • Todos los DB en la misma máquina bajo el mismo motor.
  • Todos los DB en la misma máquina, diferentes motores (Ej. MySQL + PostgreSQL)
  • One Master DB con N esclavos de solo lectura en diferentes máquinas.
  • Sharding de tablas en múltiples servidores de bases de datos.

Necesitarás:

  • Claves foráneas en DBs
  • ÚNETE a máquinas y / o motores
  • etcétera etcétera.

Uno de los problemas con un ORM ingenioso como el de Django es que oculta todos esos detalles desordenados en un buen trabajo de pintura. Para continuar haciendo eso, pero para luego agregar cualquiera de los anteriores, no es fácil (tm).


Eric Florenzano escribió una muy buena publicación de blog que le permite un soporte de varias bases de datos en: Easy MultipleDatabase Support for Django .

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


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 models / sql / where.py utilizando la sintaxis SQL de la conexión predeterminada).

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


Si simplemente necesita conexiones múltiples, puede 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()





Múltiples bases de datos para elegir

Siempre necesitamos un nombre predeterminado, los nombres del resto 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 en particular

manage.py syncdb --database=user1