Django: Атомарное чтение нескольких полей модели
У меня есть следующие модели Django и простая функция, которая обращается к базе данных:
class Shape(models.Model):
color = models.CharField()
name = models.CharField()
class Point(models.Model):
x = models.FloatField()
y = models.FloatField()
shape = models.ForeignKey(Shape, on_delete=models.CASCADE, related_name="points")
def some_access(id):
shape = Shape.objects.get(pk=id)
return shape.color, shape.name, list(shape.points.all())
Мои вопросы следующие:
В fn
some_access
: Являются ли значенияcolor
,name
иpoints
считываются в одной и той же sql-транзакции? Если нет, то может возникнуть гонка условие (чтение формы, изменение записи базы данных в другом месте, чтение точек)Если нет, то как я могу добиться того, чтобы доступ к различным атрибутам (на одной модели или на объекте с внешним ключом - например, значения x и y точек) считывались атомарно?
Если используется transaction.atomic. Означает ли это, что она блокирует базу данных и выполняет множественные обращения к базе данных, что может вызвать проблему n+1?
Единственное, что я могу придумать для вопроса 2, это обернуть все в transaction.atomic
.