GAE数据存储区查询ConjunctionNode错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GAE数据存储区查询ConjunctionNode错误相关的知识,希望对你有一定的参考价值。

我在数据存储区中有一个ndb模型,有两个字段 - 除了bookname,author等其他详细信息之外,它们已过期且到期。

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

但是,我收到错误:

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

expired_books = Books.query(ndb.AND(Books.expiry <curr_time,而不是Books.expired))文件“/ home / hduser / Documents / GCP / google-cloud-sdk / platform / google_appengine / google / appengine / ext / ndb /query.py“,第583行,在新的'收到非节点实例%r'%节点中)

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

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

答案

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

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

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

这应该工作:

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

以上是关于GAE数据存储区查询ConjunctionNode错误的主要内容,如果未能解决你的问题,请参考以下文章

请帮助我了解 GAE 数据存储区中的实体层次结构

GAE上的RESTful API:端点 - 原型数据存储区与云端点

数据存储区真的需要索引吗?

如何通过键从 GAE 数据存储中删除多个实体

从 Google App Engine 中的数据存储区获取实体以在 iOS 应用中使用

从本地 GAE 项目连接到 Google Cloud Datastore