GAE数据存储区查询ConjunctionNode错误

时间:2018-03-04 17:54:03

标签: python python-2.7 google-app-engine google-cloud-datastore app-engine-ndb

我在数据存储区中有一个带有两个字段的ndb模型 - 除了书名,作者等其他详细信息之外已过期和到期。

class Books(ndb.Model):  
     expiry = ndb.IntegerProperty() #epoch
     expired = ndb.BooleanProperty(default=False) # set True if expiry < curr_time

我写了cron.yaml和cron.py来标记expired=True以找到expiry < curr_time的书籍。

以下是我的cron.py片段:

    from google.appengine.api import search
    import logging
    from models.books import Books
    from google.appengine.ext import ndb
    import time

    def deleteindex(cls):
           curr_time = int(time.time()) + 60
           #find the books which have expired but not marked expired. 
           expired_books = Books.query(ndb.AND(Books.expiry < curr_time, not Books.expired)) 
           print expired_books

然而,我收到错误:

  

文件“/home/hduser/Documents/GCP/book-shelf453/default/app/cron.py”,第16行,在deleteindex中

     

expired_books = Books.query(ndb.AND(Books.expiry&lt; curr_time,not Books.expired))     在中输入文件“/home/hduser/Documents/GCP/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/query.py”,第583行       '收到非节点实例%r'%节点)

     

TypeError:ConjunctionNode()期望Node实例作为参数;收到非节点实例False

我不确定这个问题。请指教!谢谢!

1 个答案:

答案 0 :(得分:1)

ndb查询过滤器必须包含模型属性和值之间的比较 - 例如Books.expiryint之间的比较。

not Books.expired不是这样的比较,这是错误的原因。

不是否定Books.expired,而是将其与布尔值进行比较。

这应该有效:

expired_books = Books.query(ndb.AND(Books.expiry < curr_time, Books.expired != False))