Итак, у меня есть один и тот же код python локально и в облаке gae.Puzzling App Datastore Issue (ListProperty)
, когда я храню объект локально, то ListProperty поле типа набора элементов datetime.datetime выглядит так в Datastore просмотра:
2009-01-01 00:00:00,2010-03-10 00:00:00
, когда я храню же на облаке, зритель показывает:
[datetime.datetime(2009, 1, 1, 0, 0), datetime.datetime(2010, 3, 9, 0, 0)]
Почему разные представления?
Это меня не беспокоит, только когда я запрашиваю в этом поле в облаке, запрос не находит совпадающий объект (он должен и он локально), что заставляет меня думать, что это разное представление, вызывающее беда. Я должен повторить - код идентичен.
Кто-нибудь думает о причине, почему это происходит, и о решении?
UPDATE: мой запрос выглядит следующим образом (с помощью фильтров):
from x import y
from datetime import datetime
from google.appengine.ext import db
q = y.EntityType.all().filter('displayDateRange <=',datetime.now()).filter('displayDateRange >=',datetime.now())
usersResult = q.fetch(100)
print `len(usersResult)`
результат должен быть 1, а это 0.
На самом деле это просто ListProperty с указанным datetime.datetime значением, которое проблема - запросы в StringListProperty работают как ожидается в облаке.
Я попробовал необработанный фильтр через интерактивную консоль как на локальном, так и на облачном, и облако не дает мне никаких результатов. Так что это хранилищу вещь, я предполагаю, что это обязательно иметь что-то делать с форматом хранения - У меня есть только одно значение лица в обоих датасторов с ListProperty выглядит как:
2009-01-01 00:00:00,2010-03-09 00:00:00
[datetime.datetime(2009, 1, 1, 0, 0), datetime.datetime(2010, 3, 9, 0, 0)]
на местные и облака соответственно.
Любые идеи?
Дальнейшего Обновление
Заменен DateTime.Now() с закодированной датой-OBJ - пример фильтр теперь похож:
y.EntityType.all().filter('displayDateRange <=',datetime(2009,11,24)).filter('displayDateRange >=',datetime(2009,11,24))
Запиской с вышеуказанным диапазоном DateTime ListProperty от 1.1.2009 3,9 .2010 это должно вернуть вышеописанный объект - я пробовал этот идентичный фильтр на сервере localhost dev, и он это сделал. Облако, с его другим представлением datetime.datetime ListProperty, нет.
ПримечаниеЭтот берется из current best practice for filtering on date range
Любые идеи, что может быть не так?
обновляется по мере необходимости – rutherford
Интересно - у вас опыт Google App Engine? Это рекомендуемый шаблон для фильтрации на дату, находящуюся в определенном диапазоне (ListProperty и тест равенства) - источник: http://appengine-cookbook.appspot.com/attachment/?id=ahJhcHBlbmdpbmUtY29va2Jvb2tyEQsSCkF0dGFjaG1lbnQY0ygM – rutherford
хотя я допускаю 2 обращения к дате .now() is shoddy, изменится, что – rutherford