首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ndb: query(AdModel.daily_used < AdModel.daily_budget)是否可能

使用ndb: query(AdModel.daily_used < AdModel.daily_budget)是否可能
EN

Stack Overflow用户
提问于 2013-04-23 01:09:19
回答 3查看 154关注 0票数 1

我尝试在appengine中使用ndb执行查询,如下所示

代码语言:javascript
复制
all_adverts = AdModel.query(AdModel.daily_used < AdModel.daily_budget)

我试图只查询那些没有使用其广告活动预算的每日最大值的项目。然而,当我运行它时,我得到了以下异常:

代码语言:javascript
复制
BadValueError: Expected float, got FloatProperty('daily_budget', default=1)

是不是ndb根本不可能做到这一点,还是我的查询结构不正确?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-23 01:16:52

您的查询需要扫描所有相同的类型,这不是数据存储的典型用法。

一种更简单的方法是使用ComputedProperty。然后使用此属性进行筛选。当然,此更改只会影响以后的实体更新。

代码语言:javascript
复制
class AdvertModel(ndb.Model):
    daily_used = ndb.FloatProperty()
    daily_budget = ndb.FloatProperty()
    in_money = ndb.ComputedProperty(lambda self: self.daily_used < self.daily_budget)
票数 2
EN

Stack Overflow用户

发布于 2013-04-23 06:34:11

您的设置将需要使用自定义(复合)索引。这会增加资源。为什么不添加一个布尔型字段"daily_under_budget“。每次更新daily_used或daily_budget时,都可以设置此值。这样您就不需要自定义索引了。

票数 0
EN

Stack Overflow用户

发布于 2013-04-23 07:17:05

您需要了解的是,查询机制需要比较右侧的值,而不是另一个属性。这不是ndb的限制,而是底层架构如何工作。因此,你得到了BadValueError: Expected float, got FloatProperty('daily_budget', default=1)的错误。其他答案是您实现所需功能的最佳选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16152765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档