在谷歌应用引擎上,为什么更新不反映在交易中?

时间:2010-07-28 05:06:07

标签: python google-app-engine

我使用相同的祖先/父级/实体组在Google应用引擎数据存储中存储实体组。这样就可以在一个原子数据存储区事务中更新实体。

问题如下:

  1. 我启动了一个db事务
  2. 我通过设置entityX.flag = True
  3. 来更新entityX
  4. 我保存了entityX
  5. 我查询其中flag == True的实体。但是,这是问题所在。此查询不返回任何结果。它本应该返回entityX,但它没有。
  6. 当我删除事务时,我的代码工作正常,因此它必须是导致这种奇怪行为的事务。

    实体组中的实体更新是否在同一交易的其他地方不可见?

    PS:我正在使用Python。并且GAE告诉我我不能使用嵌套事务:(

2 个答案:

答案 0 :(得分:4)

App Engine的交易是按照这种方式设计的,即事务中的读取会在事务开始时看到快照,因此他们看不到事务中先前写入的结果:

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

答案 1 :(得分:0)

在查询之前,您似乎没有对事务进行提交

  1. 启动数据库事务
  2. 通过设置entityX.flag = True
  3. 来更新entityX
  4. save entityX
  5. COMMIT TRANSACTION
  6. 查询实体,其中flag == True。但是,这是问题所在。此查询不返回任何结果。它本应该返回entityX,但它没有。
  7. 在事务中,在提交事务之前,实体不会被持久化