- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要获取 NDB queries 上的对象匹配给定的开始和结束日期,但我无法执行这个传统上简单的查询,因为 NDB 提示:
from google.appengine.ext import ndb
from datetime import datetime
from server.page.models import Post
now = datetime.now()
query = Post.query(
Post.status == Post.STATUS_ACTIVE,
Post.date_published_start <= now,
Post.date_published_end >= now,
)
count = query.count()
错误:
BadRequestError: Only one inequality filter per query is supported.
Encountered both date_published_start and date_published_end
有没有解决办法?
最佳答案
由于每个查询的单个不等式过滤器的限制,动态获取可直接用于分页而无需任何进一步处理的单个结果列表是不可能的。相关GAE 4301 issue .
正如杰夫提到的,通过一个不等式(最好是最严格的不等式)进行过滤,然后对结果进行进一步的动态处理始终是一种选择,正如您所指出的,效率低下,但如果您需要搜索的完全灵 active ,则不可避免。
您可以通过使用 projection query 来提高性能- 减少从数据存储传输到相关属性的数据量。
您也可以尝试执行2 keys-only queries ,每个不等式一个,然后计算结果的交集 - 这可以更快地为您提供分页计数和实体列表(作为键)。最后,您可以通过直接对页面列表中的键进行键查找来获取当前页面的实体,最好是批量处理(使用 ndb.get_multi()
)。
根据预期用途,在某些情况下您可能有其他选择(当然需要额外的工作)。
您可以限制查询的范围。在某些情况下,不必查询自时间开始以来的所有 Post
实体,可能只需要特定年份或月份的结果就足够了。然后,您可以添加 year
和/或 month
Post
属性,您可以将其作为相等过滤器包含在查询中,从而可能减少结果数量动态处理从数千到数百或更少的数据。
您还可以完全避免对典型、常用案例的查询。例如,如果预期用途是生成几种月度报告,您可以拥有一些 Report
实体,其中包含每个此类报告类型/月份的 Post
键列表每当 Post
实体的相关属性发生更改时进行更新。您不必查询 Posts
实体中的报告,而是只需使用相应 Report
实体中已有的可用列表。您还可以在生成时存储/缓存实际报告,以便直接重用(而不是在每次访问时重新生成)。
关于python - 如何比较 NDB 查询中的多个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747579/
如果我有一个具有以下定义的Contact 模型: class Contact(ndb.Model): name = ndb.TextProperty(indexed=False) we
我有 webapp2 服务,它在多个不相互依赖的 NDB 模型中插入条目。现在我们要求的是服务应该在事务中。那是服务失败然后它应该恢复完整的交易(例如,如果一个条目插入到第一个和第二个模型中,并且在该
切换到 python GAE 上的 ndb 库。 我可以将 ndb 与之前使用低级 api 创建的实体一起使用吗?还是我必须复制所有旧实体并重新保存它们才能使用 ndb? 谢谢! 最佳答案 ndb 只
是否可以在 pre_put_hook 中找出实体的脏因子? 我想根据put 的内容有条件地执行一些回调。例如。如果实体的特定属性发生更改,我想发送邮件通知。我可以在调用 put() 之前手动执行此操作
我是谷歌应用引擎和 NDB 的初学者。我的问题:如果我在模型中有 1 个实体, 我想防止 2 个并行操作时发生冲突,代码示例: class MyModel(ndb.Model) count = n
假设有一个看起来像这样的 ndb.Model: class Foo(ndb.Model): bar = ndb.StringProperty() 我的问题是,如果我的唯一输入是 Foo.query
给定我构造的 key ,我想访问数据存储区以查看它是否存在,但我想要最便宜(及时)的方法来做到这一点。我正在寻找的就像一个只有键的查询,但是来自 get,例如my_key.get(keys_only=
https://developers.google.com/appengine/docs/python/ndb/ https://developers.google.com/appengine/doc
我有一个 ndb.Model,它有一个 ndb.DateTimeProperty 和一个 ndb.CompulatedProperty,它使用 ndb.DateTimeProperty 创建时间戳。
我计划将 Odoo 移植到 Google App Engine Web 应用程序。当我知道 Odoo 使用 postgresql 时,是否可以将数据库连接、查询和所有从 Postgresql db 移
我有一个 POST 方法,它调用一些 tasklet。这些 tasklet 确实有 yield ,我的代码中确实有一些 x.put_async()。所以我不希望它在所有异步内容完成之前返回。所以我用
我有一个简单的 NDB 模型: from google.appengine.ext import ndb import logging from libs import Api class User(
使用 Python NDB 的新手。 我有类似的东西: class User(ndb.Model): seen_list = nbd.KeyProperty(kind=Survey, repe
我的应用程序中有以下查询 query = cls.query().filter(cls.taskgroup_id == taskgroup_id, cls.availability == True,
我在 NDB 迁移方面遇到问题。目前,我在 NDB Cluster 中有 2 个副本。我想将集群移至新硬件中。因此,在新机器中,我设置了 datanodes 和 sqlnodes 并将管理节点指向旧集
我有一个 mysql ndb 集群(详情如下)。问题是当我做最简单的事情时,例如恢复使用 mysqldump 转储的数据库,它需要绝对的时间! IE 6 小时恢复一个大小为 745MB 且在大约 30
来自 What can be done in a transaction (我的重点): All Datastore operations in a transaction must operate
我正在对 Expense 模型的方法进行单元测试。模型的相关部分如下所示: class Expense(ndb.Model): user = ndb.KeyProperty(User, req
几年来,我一直在使用类似于下面复制的代码片段。 基本思想是 Person 可以结婚,当他们结婚时,我创建一个“Marriage”实体。一个人只能结婚一次,所以我有一个 bool 值来指示这个人是否已婚
我们使用的是 ndb 数据存储、python、标准谷歌应用引擎。我们想使用查询游标。但是为了根据 here 工作和 here ,看起来我们需要实现 datastore_model.query().or
我是一名优秀的程序员,十分优秀!