2011-11-02 14 views
6

El ORM de Django admite consultas desde una base de datos específica (cuando se definen múltiples en su proyecto) a través de la función .using() para operaciones basadas en filtro.Usando Django ORM get_or_create con múltiples bases de datos

p. Ej. MyModel.objects.filter(name='Bob').using('my_non_default_database')

¿Cómo harías el equivalente al crear nuevos registros, a través de la clase MyModel() o el acceso directo como get_or_create()?

Respuesta

10

using es un método en el gestor de MyModel.objects, por lo que puede hacer

MyModel.objects.using('my_non_default_database').get_or_create(name="Bob") 

Si tiene una instancia MyModel, se puede utilizar la palabra clave para especificar el uso de la base de datos a guardar. El django docs señala algunos problemas.

my_model = MyModel(name="Bob") 
my_model.save(using='my_non_default_database') 
+0

¿Cómo se maneja para la creación regular del modelo? p.ej. MyModel (name = 'bob') – Cerin

+1

Saving tiene un argumento de palabra clave 'using'. He actualizado mi respuesta. – Alasdair

4

using es sólo una parte de la cadena de consulta estándar. Entonces, puede usarlo en cualquier lugar antes de que la consulta se envíe a la base de datos. get_or_create, a diferencia de filter, es atómico: cuando lo llamas, lo hace inmediatamente, así que solo tienes que llamar al using antes de eso.

MyModel.objects.using('my_non_default_database').get_or_create(name='Bob') 
Cuestiones relacionadas