わかりましたので、ローカルとgaeクラウドに同じpythonコードがあります。
エンティティをローカルに保存すると、set 要素タイプ datetime.datetime の ListProperty フィールドは Datastore Viewer で次のように表示されます。
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)]
なぜ異なる表現ですか?
これは気になりません.クラウド上でこのフィールドを照会した場合にのみ、クエリは一致するエンティティを見つけることができません. 繰り返しますが、コードは同じです。
これが起こっている理由と解決策を考えている人はいますか?
更新:私のクエリは次のとおりです(フィルターを使用):
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 です。
実際には、指定された値 datetime.datetime を持つ ListProperty だけが問題です。StringListProperty に対するクエリは、クラウド上で期待どおりに機能しています。
ローカルとクラウドの両方で対話型コンソールを介して raw フィルターを試しましたが、クラウドでは結果が得られません。したがって、それはデータストアの問題です。ストレージ形式と関係があるに違いないと思います.ListPropertyが次のように見える両方のデータストアにエンティティ値が1つしかありません。
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() をハードコードされた datetime obj に置き換えました - サンプル フィルターは次のようになります。
y.EntityType.all().filter('displayDateRange <=',datetime(2009,11,24)).filter('displayDateRange >=',datetime(2009,11,24))
上記の datetime ListProperty の範囲が 1.1.2009 から 3.9.2010 の場合、これは上記のエンティティを返す必要があることに注意してください。ローカルホスト開発サーバーでこの同一のフィルターを試したところ、そうでした。クラウドは、datetime.datetime ListProperty の表現が異なりますが、そうではありません。
これは、日付範囲でフィルタリングするための現在のベスト プラクティスから取られていることに注意してください。
何が間違っている可能性がありますか?