如何使用日期编写GAE搜索查询?
这是我的数据存储。
Class Property(db.Model):
createdDate=db.DateTimeProperty(auto_now_add=True)
我想在最后几个星期显示记录。我想这个,
sevendays = datetime.now() - timedelta(hours=168)
获取日期(7天)的正确结果,我在我的网址中传递了搜索查询,如下所示,
<a href="/search?search=PropertyCaseType+%3D+Enquiry+AND+PropertyStatus+%3D+Open+AND+createdDate+%3E+sevendays" class="list-group-item">
<i class="fa fa-question-circle fa-fw"></i> New Enquires
<span class="pull-right text-muted small"><em>
{% if countEnquiryOpen %}
{{ countEnquiryOpen }}
{% else %}
0
{% endif %}
</em>
</span>
</a>
以上href = encode查询是: PropertyCaseType = Inquiry AND PropertyStatus = Open AND createdDate&gt; 7天
createdDate&gt; sevendays不起作用,否则查询工作正常并获得正确的结果。
怎么做,朋友帮帮我
答案 0 :(得分:1)
我得到了解决方案..问题是时间。所以我删除时间过滤器只有日期。像这样,
sevendays = datetime.now() - timedelta(hours=168)
sevendays = sevendays.date()
现在我得到了正确的结果。 :)
答案 1 :(得分:0)
您应该仅使用过去7天内的元素构建索引,然后查询该索引并相应地重建索引。您可以在google app engine here中阅读有关索引的内容。
答案 2 :(得分:0)
找出应用程序的错误有点困难,因为您没有显示如何使用查询字符串构建查询。
但是,问题的一个可能原因可能是您尝试将日期字符串而不是datetime
对象与createdDate属性进行比较。
E.g。
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
all_props = Property.all().run()
self.response.out.write("ALL Properties\n")
for d in all_props:
self.response.out.write('Prop: %s\n' % d.createdDate)
sevendays = datetime.now() - timedelta(hours=168)
res = Property.gql('where createdDate > :1', sevendays)
self.response.out.write("MATCHING Properties compared by datetime\n")
for d in res:
self.response.out.write('date: %s\n' % d.createdDate)
self.response.out.write("MATCHING Properties compared by string\n")
sds = str(sevendays)
res_bad = Property.gql('where createdDate > :1', sds)
for d in res_bad:
self.response.out.write('date: %s\n' % d.createdDate)
会在MATCHING Properties compared by datetime
下打印出正确的属性,但不会在MATCHING Properties compared by string
下打印出来。不幸的是,它也没有引发任何错误,告诉你在查询中使用了错误的对象。
因此,如果您在网址中直接使用查询字符串,则可能需要先将其解析为datetime
对象,例如使用datetime.strptime()
。