2011-11-02 4 views
6

ORM Django obsługuje wysyłanie zapytań z konkretnej bazy danych (gdy wiele jest zdefiniowanych w twoim projekcie) za pomocą funkcji .using() dla operacji opartych na filtrach.Używanie Django ORM get_or_create z wieloma bazami danych

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

Jak byś zrobił odpowiednik podczas tworzenia nowych rekordów, poprzez klasę MyModel() lub skrót jak get_or_create()?

Odpowiedz

10

using to metoda na kierownika MyModel.objects, więc można zrobić

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

Jeśli masz instancję MyModel można używać za pomocą słowa kluczowego, aby określić bazę danych, aby zapisać się. The django docs wskazuje na kilka gier.

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

W jaki sposób jest obsługiwany w celu regularnego tworzenia modeli? na przykład MyModel (name = 'bob') – Cerin

+1

Zapisywanie zawiera argument słowa kluczowego 'using'. Zaktualizowałem swoją odpowiedź. – Alasdair

4

using jest tylko częścią standardowego łańcucha zapytania. Możesz więc użyć go w dowolnym miejscu, zanim zapytanie zostanie wysłane do bazy danych. get_or_create, w przeciwieństwie do filter, jest atomowe: kiedy to nazwiesz, robi to natychmiast, dlatego musisz najpierw wywołać using.

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