2016-02-21 3 views
0

Вот код, скопированный из моего приложения в GAE.gqlQuerry Сравнение объектов datetime

today = datetime.datetime.strptime(date_variable, "%d/%m/%Y") 
yesterday = ref_today - datetime.timedelta(days=1) 
tomorrow = ref_today + datetime.timedelta(days=1) 
logging.info('%s : %s : %s', yesterday, today, tomorrow) 
#2016-02-19 00:00:00 : 2016-02-20 00:00:00 : 2016-02-21 00:00:00 

records = db.GqlQuery("SELECT * FROM ProgrammeQueue" 
     " WHERE scheduledFrom < :1 AND scheduledFrom > :2 " 
     " ORDER BY scheduledFrom DESC", 
     tomorrow, yesterday) 

Постановка задачи: Вывод: все записи 19/02/2016 и 20/02/2016 Ожидаемые: записи = все записи 20/02/2016

Что я делаю неправильно?

ответ

0

Вы запрос состояния:

WHERE scheduledFrom < :tomorrow AND scheduledFrom > :yesterday 

, где завтра и вчера в DateTimes. время установлено на 00:00:00, поэтому результаты будут включать даты 19/02/2016, где время больше 00:00:00.

Возможно, ваш запрос должен быть переписан для использования объектов даты, а не объектов datetime (в зависимости от определения вашей модели). или, возможно, вы должны переписать его на что-то вроде этого:

records = db.GqlQuery("SELECT * FROM ProgrammeQueue" 
     " WHERE scheduledFrom < :1 AND scheduledFrom >= :2 " 
     " ORDER BY scheduledFrom DESC", 
     tomorrow, today) 
+0

Благодаря г-н Гвин, –

+0

вычисление кода изменилось, как вчера = сегодня-datetime.timedelta (микросекунд = 1). Это сработало. Большое спасибо за указание на грубую логическую ошибку в коде. Моя модель также содержит данные о будущем. –

Смежные вопросы