Я использовал фрагмент кода, подобный тому, что я скопировал ниже в течение пары лет.
Основная идея заключается в том, что Person
может состоять в браке, и когда они женаты, я создаю сущность 'Брак'. Человек может состоять в браке только один раз, поэтому у меня есть логическое значение, чтобы указать, женат ли он (Person.married
). Когда человек вступает в брак, я обновляю Person
и создаю сущность Marriage
в транзакции, подобной этой:
@ndb.transactional(xg=True)
def update_person(pid):
person = Person.get_by_id(pid)
if person.married:
raise RuntimeError("This person is already married.")
else:
marriage = Marriage(person=person)
person.married = True
ndb.put_multi([person, marriage])
Это единственное место в моем коде, где создается объект Marriage
. Все обновления Person
сущностей выполняются в транзакциях.
Почему-то у меня теперь есть личность, которая дважды состоит в браке (часть двух Брачных сущностей)! Впервые за последние годы это произошло, но это смущает, что это может произойти.
Есть ли ошибка в моем коде? Если нет, есть идеи, как это произошло?