NDB查询链接奇怪 - 顺序+不等式?

时间:2014-03-01 23:35:46

标签: google-app-engine app-engine-ndb

我花了几个小时调试看似奇怪的东西。但是,我不知道它是不是一个错误,或者我只是做错了什么。简短的版本,似乎我在NDB查询和订单上有一个不等式过滤器,它们必须是同一行。

注意:下面显示的所有数据都是按顺序创建的,即使我正在使用数据存储区中的日期,因此有些数据没有微秒。

#Q1. Yields the correct results:
q = BlogPost.query().filter(BlogPost.published_date > PUBLISHED_DATE_MIN).order(-BlogPost.published_date)
for p in q.fetch(1000):
   print "%s - %s" %  (p.published_date, p.title)

# 2014-03-02 21:49:25 - First
# 2014-03-01 22:51:14.998963 - Should be 2nd
# 2014-03-01 21:49:54.273152 - Should be Third

这是我最初的所作所为。注意:订单位于单独的行

q = BlogPost.query().filter(BlogPost.published_date > PUBLISHED_DATE_MIN)
q.order(-BlogPost.published_date)

for p in q.fetch(1000):
    print "%s - %s" %  (p.published_date, p.title)
# 2014-03-01 21:49:54.273152 - Should be Third
# 2014-03-01 22:51:14.998963 - Should be 2nd
# 2014-03-02 21:49:25 - First

NDB查询似乎只是无序或反向排序,然而,我删除了不等式,我得到:

q = BlogPost.query() #.filter(BlogPost.published_date > PUBLISHED_DATE_MIN)
q.order(-BlogPost.published_date)

for p in q.fetch(1000):
    print "%s - %s" %  (p.published_date, p.title)
 # 2014-03-02 21:49:25 - First
 # 2014-03-01 22:51:14.998963 - Should be 2nd
 # 2014-03-01 21:49:54.273152 - Should be Third

我在部署代码时在sdk控制台以及远程控制台和实际的appspot上看到了这种行为。这是一个错误(不太可能)或我错过的东西吗?

1 个答案:

答案 0 :(得分:4)

当你运行q.order(-BlogPost.published_date)时,它会创建并返回一个你没有分配给任何东西的新查询。 你想拥有:

q = q.order(-BlogPost.published_date)
相关问题