首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GqlQuery返回随机结果

GqlQuery返回随机结果
EN

Stack Overflow用户
提问于 2013-07-13 17:14:13
回答 1查看 72关注 0票数 0

我正在基于Google的应用程序引擎编写一个非常简单的web应用程序。这是我第一次使用Python和Google的数据存储。

应用程序应该在其主页上显示一些问题。这些问题存储在一个名为named的表中。

代码语言:javascript
复制
class Question(db.Model):
  question_id = db.IntegerProperty()
  question = db.StringProperty()

下面的代码选择该表的所有条目,并将数据提交给模板。

代码语言:javascript
复制
questions = db.GqlQuery('SELECT * FROM Question ORDER BY question_id')

# debugging loop
for question in questions:
  logging.info(questions.question_id)

template_values = {
  'questions' : questions
}

最后,模板在index.html上显示问题。

代码语言:javascript
复制
{% for question in questions %}
  // HTML-CODE
  {{ question.question }}
  // HTML-CODE
{% endfor %}

实际上,这些(非常基本的)操作运行良好,但程序会跳过两次或向列表中添加问题。这完全是随机发生的。我甚至认为它可能在几个小时没有出现的时候消失了。该错误必须紧跟在GqlQuery语句之后发生,因为调试循环已经指示了错误的ids。

哪个问题被跳过或添加也是随机的,我在这里看不到模式。唯一的问题是,它要么比预期多一个问题,要么比预期少一个问题。永远不会出现一个问题被跳过,而另一个问题被同时添加两次的情况。表格问题目前只包含五个条目,所以它非常容易管理。

我希望这不只是我缺乏经验的结果。我在这个问题上花了几天的时间。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2013-07-14 10:43:28

如果在代码中的其他地方添加或删除问题,可能会导致这种看似错误的行为。默认情况下,App Engine查询是“最终一致的”,这意味着查询不会立即反映数据存储的真实状态。您可以在https://developers.google.com/appengine/docs/python/datastore/queries#Python_Data_consistency上阅读有关查询一致性的更多信息。

正如本文所述,祖先查询具有很强的一致性。要做到这一点,你必须把你所有的问题放在同一个“实体组”中。这很容易做到,但它必然会引入一个瓶颈,并且会限制您创建或修改问题的速度。只有当您知道问题很少更改时,即使您的站点上有大量用户,它也是合适的。

如果你不认为这就是你所看到的问题,你能发布更多关于如何在你的应用程序中创建/修改/删除问题的细节吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17628725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档