好的,我有相同的python代碼在本地和gae雲。令人費解的App引擎數據存儲問題(ListProperty)
當我在本地存儲實體,集合元素類型datetime.datetime的的ListProperty字段看起來像所以在數據存儲區查看器:
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.1
其實它只是指定值的datetime.datetime那是的ListProperty問題 - 對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)]
本地和雲分別。
任何想法?
此外更新
與硬編碼日期時間OBJ取代了datetime.now() - 例如過濾器現在看起來像:從2009年1月1日至3.9以上的日期時間的ListProperty範圍
y.EntityType.all().filter('displayDateRange <=',datetime(2009,11,24)).filter('displayDateRange >=',datetime(2009,11,24))
注.2010這應該返回上述實體 - 我在localhost dev服務器上嘗試了相同的過濾器,並且它是這樣做的。雲,它與datetime.datetime ListProperty的不同表示不會。
注意這是從current best practice for filtering on date range
任何想法採取了什麼地方出錯了?
更新需要 – rutherford 2009-11-23 12:50:34
有趣的 - 你谷歌應用程序引擎的經驗?這是對特定範圍內的日期進行過濾的推薦模式(ListProperty and equality test) - source:http://appengine-cookbook.appspot.com/attachment/?id=ahJhcHBlbmdpbmUtY29va2Jvb2tyEQsSCkF0dGFjaG1lbnQY0ygM – rutherford 2009-11-24 13:48:45
儘管我承認2次調用datetime .now()是劣質的,會改變 – rutherford 2009-11-24 13:49:17