【问题标题】:How to query all entries from past 6 hours ( datetime) in GQL?如何在 GQL 中查询过去 6 小时(日期时间)的所有条目?
【发布时间】:2010-11-02 21:52:42
【问题描述】:

我在 Google App Engine 中有一个带有日期字段的简单表格。我想查询从现在到 6 小时前的日期字段值的所有行。我如何形成这个查询?

【问题讨论】:

  • 编辑标题以使其对 Google 更友好..

标签: google-app-engine gql gqlquery


【解决方案1】:

我知道你说的是 GQL,但这是我使用的一个 python 辅助函数:

import datetime
def seconds_ago(time_s):
    return datetime.datetime.now() - datetime.timedelta(seconds=time_s)

很可能有一种更简洁的方式来编写它:我不是 python 专家,而是选择了第一个可行的方法。如果您关心,请查看日期时间文档。它是这样使用的:

my_query = MyTable.all().filter("date >", seconds_ago(6*60*60))

我确信可以毫不费力地翻译成 GQL,但我更喜欢面向对象的接口,而且我不知道必要的 DATETIME 语法。

在 python 中,查询是这样使用的:

# get a count
my_query.count()
# get up to 1000 records
my_query.fetch(1000)
# iterate over up to 1000 records
for result in my_query:
    # do something with result

【讨论】:

    【解决方案2】:
    SELECT * FROM simpletable
    WHERE datefield < DATETIME(year, month, day, hour, minute, second)
    

    在您的应用程序代码中计算这些年份、月份等。

    【讨论】:

    • 您如何获得该查询的计数?
    • 在 Python App Engine 中,您可以从中创建一个 GqlQuery 并在其上调用 .count() 方法;无法将 COUNT 直接放入 Gql 本身。
    • 请注意,计数效率低下 - 计数实体的数量为 O(n),在 App Engine 中,计数不能超过 1000。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多