1
我正在爲Google App Engine上的Django應用程序編寫一些單元測試。測試通過調用init_datastore_v3_stub
來使用數據存儲區存根,並在其中存儲一些測試數據。對於簡單的模型,這工作正常,但是當我存儲模型B
這是模型A
的子類時,我只會得到結果,如果我查詢模型爲A
。示例代碼:GAE數據存根存根問題
class A(db.polymodel.PolyModel):
...
class B(A):
....
B().put()
print A.all().count() # prints 1
print B.all().count() # prints 0
注意,在生產線都將打印1. 有什麼建議?
更新: 似乎問題不是與數據庫本身相關,而是與PolyModel實現無關。我注意到B._entity
不包含'class'
值,因爲它應該包含'_class'
。它看起來像:
print B._entity # prints {... '_class'=[u'A', u'B'] ...}
這解釋了我得到的結果。 當我手動設置'class'
價值,一切正常:
b = B()
b._entity['class'] = b._entity['_class']
b.put()
print B.all().count() # prints 1
我將繼續進行調查,並更新在這裏,當我找到原因的問題。
您可能會遇到最終的結果。在查看其他問題之前,您需要排除這一點。 –
感謝@TimHoffman的評論。我試圖在打印前添加「sleep(10)」,結果仍然相同。我還能做些什麼來排除最終的一致性? – Tzach
從剛剛放入的對象中獲取密鑰,然後調用get(),這將解決最終的一致性。 –