Google DataStore - как получить данные по дате - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь написать запрос на выборку для 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)

Что я делаю не так?

1 Ответ

0 голосов
/ 15 октября 2018

Примечание: ваш date является целым числом, передача его в datetime.strptime(date, '%Y%m%d') не сработает, вы получите TypeError: strptime() argument 1 must be string, not int.Вам нужно будет использовать строку, а не int.Но это не совсем проблема.

В хранилище данных есть столбец поля даты с этим форматом 2018-02-20 (11: 07: 36.000) MMT

Формат не имеет значения, вы не должны работать со свойствами метки времени в виде строк.Другими словами, вам не нужно использовать strftime/strptime.Вместо этого вы должны обращаться с ними как с datetime объектами.Вы можете найти пример в Ограничения на запросы :

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...