Google DataStore-如何按日期获取数据

时间:2018-10-15 02:42:23

标签: python google-app-engine google-cloud-datastore

我正在尝试为DataStore编写提取查询。

在数据存储区中,日期字段列的格式为 2018-02-20(11:07:36.000)MMT

我只想获取指定日期的数据

我正在执行以下操作,但不起作用:

def query(self, date=None):

    query = self.client.query(kind='Test')
    if date != None:
        query.add_filter('date', '>', datetime.strptime(date, '%Y%m%d').strftime('%Y-%m-%d'))
        query.add_filter('date', '<', datetime.strptime(date, '%Y%m%d').strftime('%Y-%m-%d'))

    results = list(query.fetch())
    print(results)

    return results


if __name__ == '__main__':
    date = 20181012
    data_list = query(date)

我在做什么错了?

2 个答案:

答案 0 :(得分:5)

旁注:您的date是一个整数,将其传递给datetime.strptime(date, '%Y%m%d')无效,您将得到一个TypeError: strptime() argument 1 must be string, not int。您需要使用字符串,而不是整数。但这不是真正的问题。

  

在数据存储区中,该日期字段列的格式为 2018-02-20   (11:07:36.000)MMT

格式无关紧要,不应将timestamp属性用作字符串。换句话说,您不需要使用strftime/strptime。您应该将它们视为datetime对象。您可以在Restrictions on queries中找到一个示例:

start_date = datetime.datetime(1990, 1, 1)
end_date = datetime.datetime(2000, 1, 1)
query = client.query(kind='Task')
query.add_filter(
    'created', '>', start_date)
query.add_filter(
    'created', '<', end_date)

另一个重要的注意事项是,添加了过滤器的查询将永远不会产生任何结果:'date'属性值不能同时大于和小于相同其他值-您的datetime.strptime(date, '%Y%m%d').strftime('%Y-%m-%d'),同时存在于两个过滤器中。您需要在2个过滤器中提供2个不同的开始和结束时间戳记值。

使上面的示例适合您的问题,就像这样:

    query.add_filter('date', '>=', date)
    query.add_filter('date', '<', date + datetime.timedelta(days=1))

,您将'date'指定为datetime

date = datetime.datetime(2018, 10, 12)

答案 1 :(得分:0)

这是在带有JAVA运行时的GAE中通过JDO查询进行日期相等过滤的一种方法:

sudo tar -C /usr/local --strip-components 1 -xvf node-v8.1.1-linux-x64.tar.gz