В движке приложений Google, почему обновления не отражаются в транзакции? - PullRequest
2 голосов
/ 28 июля 2010

Я храню группы сущностей в хранилище данных Google App Engine с одним и тем же предком / родителем / entityGroup.Это делается для того, чтобы сущности могли обновляться в одной транзакции атомарного хранилища данных.

Проблема заключается в следующем:

  1. Я запускаю транзакцию БД
  2. Я обновляю entityXустановив entityX.flag = True
  3. Я сохраняю entityX
  4. Я запрашиваю сущность, где flag == True.НО, вот проблема.Этот запрос НЕ возвращает никаких результатов.Он должен был вернуть entityX, но это не так.

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

Разве обновления сущностей в группе сущностей не будут видны в других местах той же транзакции?

PS: я использую Python.И GAE говорит мне, что я не могу использовать вложенные транзакции: (

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

Транзакции App Engine сконструированы таким образом, то есть операции чтения внутри транзакции видят моментальный снимок на начало транзакции, поэтому они не видят результат более ранних записей в транзакции:

http://code.google.com/appengine/docs/python/datastore/transactions.html#Isolation_and_Consistency

0 голосов
/ 28 июля 2010

Похоже, что вы не выполняете фиксацию транзакции перед запросом

  1. начать транзакцию в БД
  2. обновить entityX, установив entityX.flag = True
  3. сохранить entityX
  4. COMMIT TRANSACTION
  5. запрос для объекта, где flag == True.НО, вот проблема.Этот запрос НЕ возвращает никаких результатов.Он должен был вернуть entityX, но это не так.

В транзакции сущности не будут сохранены, пока транзакция не будет зафиксирована

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...