代码之家  ›  专栏  ›  技术社区  ›  willem

在googleappengine上,为什么更新不会反映在事务中?

  •  2
  • willem  · 技术社区  · 14 年前

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

    问题如下:

    1. 我救了entityX
    2. 我查询flag==True的实体。但问题是。此查询不返回任何结果。它应该返回entityX,但它没有。

    当我删除事务时,我的代码工作得很好,所以一定是事务导致了这种奇怪的行为。

    对实体组中实体的更新是否应在同一事务的其他地方不可见?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Saxon Druce    14 年前

    App Engine的事务是这样设计的,即在事务中读取看到事务开始时的快照,因此它们看不到事务中先前写入的结果:

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

        2
  •  0
  •   naikus    14 年前

    看起来您在查询之前没有对事务执行提交

    1. 启动数据库事务
    2. 通过设置entityX.flag=True更新entityX
    3. 保存entityX
    4. 查询标志==True的实体。但问题是。此查询不返回任何结果。它应该返回entityX,但它没有。

    在事务中,实体在事务提交之前不会被持久化