GAE 数据存储区查询 ConjunctionNode 错误
GAE datastore query ConjunctionNode error
我在数据存储中有一个 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
,而是将其与布尔值进行比较。
这应该有效:
expired_books = Books.query(ndb.AND(Books.expiry < curr_time, Books.expired != False))
我在数据存储中有一个 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
,而是将其与布尔值进行比较。
这应该有效:
expired_books = Books.query(ndb.AND(Books.expiry < curr_time, Books.expired != False))