我尝试在appengine中使用ndb执行查询,如下所示
all_adverts = AdModel.query(AdModel.daily_used < AdModel.daily_budget)我试图只查询那些没有使用其广告活动预算的每日最大值的项目。然而,当我运行它时,我得到了以下异常:
BadValueError: Expected float, got FloatProperty('daily_budget', default=1)是不是ndb根本不可能做到这一点,还是我的查询结构不正确?
发布于 2013-04-23 01:16:52
您的查询需要扫描所有相同的类型,这不是数据存储的典型用法。
一种更简单的方法是使用ComputedProperty。然后使用此属性进行筛选。当然,此更改只会影响以后的实体更新。
class AdvertModel(ndb.Model):
daily_used = ndb.FloatProperty()
daily_budget = ndb.FloatProperty()
in_money = ndb.ComputedProperty(lambda self: self.daily_used < self.daily_budget)发布于 2013-04-23 06:34:11
您的设置将需要使用自定义(复合)索引。这会增加资源。为什么不添加一个布尔型字段"daily_under_budget“。每次更新daily_used或daily_budget时,都可以设置此值。这样您就不需要自定义索引了。
发布于 2013-04-23 07:17:05
您需要了解的是,查询机制需要比较右侧的值,而不是另一个属性。这不是ndb的限制,而是底层架构如何工作。因此,你得到了BadValueError: Expected float, got FloatProperty('daily_budget', default=1)的错误。其他答案是您实现所需功能的最佳选择。
https://stackoverflow.com/questions/16152765
复制相似问题