GAE搜索查询使用日期?

时间:2015-04-03 04:00:25

标签: python twitter-bootstrap google-app-engine

如何使用日期编写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不起作用,否则查询工作正常并获得正确的结果。

怎么做,朋友帮帮我

3 个答案:

答案 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()