python - GAE 数据存储查询 ConjunctionNode 错误

标签 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

但是,我收到错误:

File "/home/hduser/Documents/GCP/book-shelf453/default/app/cron.py", line 16, in deleteindex

expired_books = Books.query(ndb.AND(Books.expiry < curr_time, not Books.expired)) File "/home/hduser/Documents/GCP/google-cloud-sdk/platform/google_appengine/google/appengine/ext/ndb/query.py", line 583, in new ' received a non-Node instance %r' % node)

TypeError: ConjunctionNode() expects Node instances as arguments; received a non-Node instance False

我不确定这里的问题。请建议!谢谢!

最佳答案

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

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

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

这应该有效:

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

关于python - GAE 数据存储查询 ConjunctionNode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098476/

相关文章:

python - 如何产生嵌套迭代器返回的所有值?

Python unicode-转义 : use only\uNNNN codes, no\xNN

python - 如何快速填充一个序列

python - Wagtail:更改 Page.title 的 max_length

python - 将 pandas 数据帧的字符串列转换为 0 1 向量

python - 如何在Python中为一个键存储多个值

google-app-engine - 开发服务器上的 Google App Engine 后端 URL。如何在代码中查找?

java - 如何从 JSP 文件中删除实体(使用 Google App Engine 的 Java)

google-app-engine - Google App Engine 上由 Google 管理的 SSL 的 ERR_CERT_COMMON_NAME_INVALID

python - 隐式函数,希望根据键执行不同的数学函数