Ndb 默认顺序不保留插入顺序
Ndb default order does not preserve insertion order
我在一个项目中使用了 GAE 和 NDB。我只是注意到,如果我创建多个对象,然后检索这些对象的列表,则顺序不会保留(我在对象上使用 fetch()
)。
这是管理页面的截图,显示了同样的问题:
因为你可能(如果太小here就是link)看我有几个sessions
。现在,我按顺序创建了名称为 day
的会话,从 0 到 7。
但是如您所见,订单并未保留。
我检查了一下,实际上 keys
不是增量的。 id
(id
应该是递增的吧?不过反正有些classes,不是这个,我用的是手工钥匙,所以不会有id
).
有没有办法保留插入顺序?
(或者这只是一种奇怪的行为?还是我的错?)
PS:如果你想看一下代码:this is the session model which extends this class 我做了
除非您执行将按特定顺序检索的查询,否则不会保留该顺序。
是什么让您认为应该订购它们?
keys
和 id
在 ndb
中都不是严格递增的(并且递增 1)。您可以设置自己的 id
s 并确保它们正确地自动递增。
或者您可以在模型中添加 DateTimeProperty
:
created = ndb.DateTimeProperty(auto_now_add=True)
在您看来,您可以使用过滤器按插入日期对实体进行排序,例如:
posts = Post.query().order(-Post.created).fetch()
这将按插入日期的降序排序和获取您的(比方说)Post
实体。
我在一个项目中使用了 GAE 和 NDB。我只是注意到,如果我创建多个对象,然后检索这些对象的列表,则顺序不会保留(我在对象上使用 fetch()
)。
这是管理页面的截图,显示了同样的问题:
因为你可能(如果太小here就是link)看我有几个sessions
。现在,我按顺序创建了名称为 day
的会话,从 0 到 7。
但是如您所见,订单并未保留。
我检查了一下,实际上 keys
不是增量的。 id
(id
应该是递增的吧?不过反正有些classes,不是这个,我用的是手工钥匙,所以不会有id
).
有没有办法保留插入顺序? (或者这只是一种奇怪的行为?还是我的错?)
PS:如果你想看一下代码:this is the session model which extends this class 我做了
除非您执行将按特定顺序检索的查询,否则不会保留该顺序。
是什么让您认为应该订购它们?
keys
和 id
在 ndb
中都不是严格递增的(并且递增 1)。您可以设置自己的 id
s 并确保它们正确地自动递增。
或者您可以在模型中添加 DateTimeProperty
:
created = ndb.DateTimeProperty(auto_now_add=True)
在您看来,您可以使用过滤器按插入日期对实体进行排序,例如:
posts = Post.query().order(-Post.created).fetch()
这将按插入日期的降序排序和获取您的(比方说)Post
实体。