У меня есть таблица, как показано ниже
select id, name from node;
+----+------+
| id | name |
+----+------+
| 5 | na |
+----+------+
Затем определите функцию ниже
>>> def foo_with_sfu(seconds):
... with transaction.atomic():
... node = Node.objects.select_for_update().filter(pk=5)[0]
... print(node.name)
... time.sleep(seconds)
... node = Node.objects.get(pk=5)
... print(node.name)
...
Я надеялся, что select_for_update заблокирует строку pk = 5, поэтому, если я открою другую консоль для измененияимя узла во время time.sleep, операция изменения будет заблокирована, и две печати вышеупомянутой функции всегда будут возвращать согласованный результат.
Но на самом деле, когда я запускаю функцию и запускаю update sql в другой консоливо время time.sleep обновление не было заблокировано.
Кажется, что выбор для обновления не блокирует строку.Почему?