1

我在应用引擎中一直面临这个问题。由于我是 App Engine 的新手,所以我不知道自己的做法是否正确。

每当将新记录插入数据存储区时,新插入的记录不会反映在应用程序中。它只会在下次重新加载后出现。

这是简单的代码:添加一个用户并打印用户表中的所有用户:

def add_user(name):
    u = User(name = name)
    u.put()
    all_users = [u.name for u in User.all().order('name')]
    #On printing 'all_users', it doesn't show recently added user

这是 App Engine 中的常见行为吗?在数据存储中添加新记录需要时间吗?插入记录的方式有什么问题吗?请帮忙..

4

2 回答 2

2

你永远不应该考虑使用睡眠。

您所看到的是 HRD 中的“最终一致性”。阅读“Structuring Data for Strong Consistency” https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency,其中描述了进行强一致性查询的策略。

顺便说一句,如果您刚刚 put() 一个用户实体,则无需查询它,您已经拥有它。

于 2013-05-03T11:51:29.277 回答
1

数据存储上的操作分两部分进行:提交阶段和应用阶段。

您可以在https://developers.google.com/appengine/docs/python/datastore/overview#Datastore_Writes_and_Data_Visibility了解更多信息

但简短的版本是数据存储操作在提交阶段之后返回,而不是在应用阶段之后。您可能已经告诉数据存储添加/更新/删除一个对象,但即使在特定操作返回后,该操作也需要几毫秒才能执行。

您可能需要在代码中添加人为延迟。

import time
time.sleep(1)

或者您可以使用@db.transactional. 在显示结果之前使用事务性来确保数据库是一致的。https://developers.google.com/appengine/docs/python/datastore/transactions

于 2013-05-03T11:14:42.687 回答