my_model_instance = MyModel.objects.select_for_update().get(id=1)
something_related = my_model_instance.related_thing
在上面的代码中,lated_thing
是通过外键与 my_model_instance
相关的另一个模型实例。由于我最初执行了 select_for_update()
,lated_thing
也会被锁定吗?
最佳答案
没有。您给出的示例将进行 2 个查询:
SELECT ••• FROM `mymodel` WHERE `mymodel`.`id` = 1 FOR UPDATE;
SELECT ••• FROM `related_thing` WHERE `related_thing`.`id` = ?;
显然只有第一个锁。但是,如果您使用 select_lated(),单个查询将是:
SELECT ••• FROM `mymodel` LEFT OUTER JOIN `related_thing` ON (`mymodel`.`related_thing_id` = `related_thing`.`id`) WHERE `mymodel`.`id` = 1 FOR UPDATE;
在这种情况下,它也会锁定 related_thing (至少在 MySQL 中,但它可能依赖于数据库)。
关于django - 在 Django 中,如果我 select_for_update() 一个特定的模型实例,它的相关模型实例也会被锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522883/