我花了几个小时调试看似奇怪的东西。但是,我不知道它是不是一个错误,或者我只是做错了什么。简短的版本,似乎我在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上看到了这种行为。这是一个错误(不太可能)或我错过的东西吗?
答案 0 :(得分:4)
当你运行q.order(-BlogPost.published_date)
时,它会创建并返回一个你没有分配给任何东西的新查询。
你想拥有:
q = q.order(-BlogPost.published_date)