Ndb默认顺序不保留插入顺序

时间:2015-04-15 10:25:53

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

我使用GAE和NDB进行项目。我只是注意到,如果我创建了几个对象,然后我检索这些对象的列表,则不保留顺序(我在对象上使用fetch())。

这是管理页面的屏幕截图,显示了同样的问题: screenshot

因为可能(如果它太小here是链接),请参阅我的几个sessions。现在,我按顺序创建名称为day的会话,从0到7。

但正如您所见,订单未被保留。

我查了一下,实际上keys不是增量的。 idid都不应该是增量的,不应该是增量的吗?但无论如何,在某些类中,不是这一类,我使用了手工制作的密钥,因此没有id )。

有没有办法保存广告订单? (或者这只是一种奇怪的行为?或者这是我的坏事?)

PS:如果你想查看代码:this是扩展this我做的课程的会话模型

2 个答案:

答案 0 :(得分:3)

keys中,idndb都不是严格的增量(并且是一个增量)。您可以设置自己的id并确保它们正确自动增量。

或者您可以将DateTimeProperty

添加到您的模型中
created = ndb.DateTimeProperty(auto_now_add=True)

在您的视图中,您可以使用过滤器按插入日期对实体进行排序,例如:

posts = Post.query().order(-Post.created).fetch()

将按插入日期的降序排序并获取您的(假设)Post实体。

答案 1 :(得分:0)

除非您执行以特定顺序检索的查询,否则不会预期订单会被保留。

是什么让你觉得应该订购?