Использование Django ORM get_or_create с несколькими базами данных - PullRequest
6 голосов
/ 02 ноября 2011

ORM Django поддерживает запросы из конкретной базы данных (если в вашем проекте определены несколько объектов) с помощью функции .using () для операций на основе фильтров.

например. MyModel.objects.filter(name='Bob').using('my_non_default_database')

Как бы вы сделали эквивалент при создании новых записей через класс MyModel () или ярлык, как get_or_create ()?

Ответы [ 2 ]

10 голосов
/ 02 ноября 2011

using - это метод в MyModel.objects менеджере, поэтому вы можете сделать

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

Если у вас есть экземпляр MyModel, вы можете использовать ключевое слово using, чтобы указать базу данных для сохранения. Django Docs указывают на некоторые ошибки.

my_model = MyModel(name="Bob")
my_model.save(using='my_non_default_database')
4 голосов
/ 02 ноября 2011

using является лишь частью стандартной цепочки запросов.Таким образом, вы можете использовать его в любом месте до отправки запроса в БД.get_or_create, в отличие от filter, является атомарным: когда вы вызываете его, он сразу же делает свое дело, поэтому вам просто нужно позвонить using до этого.

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