2015-04-03 71 views
1

如何使用日期編寫GAE搜索查詢?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 =編碼查詢: PropertyCaseType =查詢和PropertyStatus = Open AND createdDate> sevendays

createdDate> sevendays不工作,否則查詢工作正常,得到正確的結果。

如何做到這一點,朋友幫我

回答

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。不幸的是,它也不會引發任何錯誤,告訴您在查詢中使用了錯誤的對象。

因此,如果直接使用查詢字符串,因爲它是在url中傳遞的,則可能需要先將它解析爲datetime對象。 datetime.strptime()

+0

偉大的尼克...謝謝.. – Baskaran 2015-04-03 09:31:33

0

你應該建立使用只從最近7天內的元素的索引,然後查詢該索引,並相應地重建索引。你可以閱讀谷歌應用程序引擎here索引。

+0

好的謝謝Niklas Rosencrantz .. – Baskaran 2015-04-03 09:31:03

1

我得到了解決方案..問題是時間。所以我刪除了時間過濾器日期。像這樣,

sevendays = datetime.now() - timedelta(hours=168) 
sevendays = sevendays.date() 

現在我得到正確的結果。 :)