Найти - Пользователи
Полная версия: Сколько строк затронул UPDATE
Начало » Django » Сколько строк затронул UPDATE
1
presidentua
Столкнулся с такой проблемой. Есть многопоточная система и очереди что обрабатывают виртуальные машины. И вот поидее мне в начале очереди нужно проапдейтить одну запись, и изменить ее состояние на “ЗАНЯТО”, чтобы никакая другая очередь не начала обработку именно этой виртуальной машины.
Тоесть мне нужно сделать update одной записи, и при этом знать, что он прошел отлично:
UPDATE VirtualMachine
SET status = WORK
WHERE status = FREE
LIMIT 1
И после этого нужно узнать, сколько столбцов было затронуто - или 0 или 1.

Я сначала думал что-то такое…
Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')
Но ведь LIMIT нету, да и я update не возвращает количество строк что были затронуты.

Сейчас приблизительно такое(без try инструкций)
vm = VirtualMachine.objects.filter(
status=VirtualMachine.STATUS_FREE,
)[0]
vm.status = VirtualMachine.STATUS_WORK
vm.save()
Работает, но плохо потому что между первой выборкой при апдейте может пройти апдейт с другого треда…

Подскажите пожалуйста как это можно реализовать на Django Model API!

Или это можно решить лишь используя транзанкции? Но транзанкции не очень нравяться, потому что я могу в этой функции долго ждать, пока машина освободиться - и тем самым буду постоянно включать и выключать транзанкции.

Спасибо
presidentua
Перешел на уровень “raw SQL queries” - там все что указано мною, достаточно эфективно решилось :).

Так что как мне подсказали “Model API is good, but raw sql is god” :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB