googledatastore如何通过d获取数据

2024-04-20 12:47:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为数据存储编写一个fetch查询。在

在数据存储中,日期字段列的格式为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)

我做错什么了?在


Tags: 数据selfnoneadddatetimedateif格式
1条回答
网友
1楼 · 发布于 2024-04-20 12:47:58

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

In datastore it has date field column with this format 2018-02-20 (11:07:36.000) MMT

格式与此无关,您不应该将时间戳属性作为字符串进行操作。换句话说,你不应该使用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个不同的开始和结束时间戳值。在

将上面的例子应用到你的问题中,大概是:

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

并将'date'指定为datetime

^{pr2}$

相关问题 更多 >