【问题标题】:Performing NDB Query During cronjob在 cronjob 期间执行 NDB 查询
【发布时间】:2013-04-08 02:41:32
【问题描述】:

我有一个 GAE(谷歌应用引擎)应用程序,它每隔 15 分钟解析一次网站。每 15 分钟,cron 将检查要加载的最旧数据(在本例中为 BitData())的时间戳,并将从该点解析数据,直到 utc.now()。 不幸的是,我无法通过查询 NDB 数据库以获取最新的 BitData() 对象的第一部分。

代码示例:

def bitcoincharts_last():
    q = BitData.query()
    q = q.order(BitData.tstamp)
    if q == None:
        return '0'
    else:
        return q[0]

这会在日志中显示错误:

TypeError: order() expects a Property or query Order; received <class 'google.appengine.ext.ndb.model.DateTimeProperty'>

使用q = q.order(-BitData.tsamp) 来反转响应的顺序,而不是给出:

TypeError: bad operand type for unary -: 'type'

我已经对照示例 herehere 和 NDB Google Docs 检查了我的代码,但我似乎找不到查询无法运行的原因。

比特数据:

class BitData(ndb.Model):
    key = ndb.KeyProperty
    tstamp = ndb.DateTimeProperty
    price = ndb.IntegerProperty
    amount = ndb.IntegerProperty

【问题讨论】:

  • 你BitData模型的定义是什么?
  • 更新了问题。

标签: python google-app-engine app-engine-ndb


【解决方案1】:

模型定义应该是:

class BitData(ndb.Model):
    key = ndb.KeyProperty()
    tstamp = ndb.DateTimeProperty()
    price = ndb.IntegerProperty()
    amount = ndb.IntegerProperty()

您只是将 Class 字段定义为指向 ndb 属性类,实际上并没有实例化它们中的任何一个。

【讨论】:

  • 感谢工作。当我从常规数据库模型切换它时,我一定错过了。同样在订单前使用减号,如下所示:q = q.order(-BitData.tsamp) 仍然给出相同的错误
  • 你确定吗?使用我提供的新模型定义后,对我来说效果很好。
  • 其实你的权利。在刷新然后再次更改之前,我可能没有将它保存在 Eclipse 中。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2023-04-01
  • 2013-05-10
  • 1970-01-01
相关资源
最近更新 更多