数据存储中新添加的记录未反映在应用程序中

时间:2013-05-03 10:51:31

标签: python google-app-engine google-cloud-datastore

我一直在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中的常见行为吗?在数据存储区中添加新记录需要时间吗?插入记录的方式有什么问题吗?请帮忙..

2 个答案:

答案 0 :(得分:2)

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

您所看到的是人力资源开发中的“最终一致性”。请阅读“构建强大一致性数据”https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency,其中介绍了进行强一致性查询的策略。

顺便说一句,如果你只是把()一个用户实体,你不需要查询它,你已经拥有它。

答案 1 :(得分: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