我一直在app引擎中遇到这个问题。由于我是App Engine的新手,我不知道我是否正确行事。
每当将新记录插入数据存储区时,此新插入的记录都不会反映在应用程序中。它只会在下次重新加载后出现。
这是一个简单的代码:添加用户并只打印User表中的所有用户:
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中的常见行为吗?在数据存储区中添加新记录需要时间吗?插入记录的方式有什么问题吗?请帮忙..
答案 0 :(得分:2)
你永远不应该考虑使用睡眠。
您所看到的是人力资源开发中的“最终一致性”。请阅读“构建强大一致性数据”https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency,其中介绍了进行强一致性查询的策略。
顺便说一句,如果你只是把()一个用户实体,你不需要查询它,你已经拥有它。
答案 1 :(得分:1)
数据存储区上的操作分为两部分:提交阶段和应用阶段。
了解更多相关信息但是短版本是数据存储区操作在提交阶段之后返回,而不是在应用阶段之后。您可能已经告诉数据存储区添加/更新/删除对象,但即使在特定的操作系统返回后,该操作也需要几毫秒才能执行。
您可能需要在代码中添加人为延迟。
import time
time.sleep(1)
或者您可以使用@db.transactional
。在显示结果之前使用事务性来确保数据库是一致的。 https://developers.google.com/appengine/docs/python/datastore/transactions