[英]AppEngine Python NDB Type Error on .order()
@property
def returns_an_int(self):
some_var = do_something_that_returns_int()
if some_var:
return int(some_var)
else:
return 0
我有一個使用上面的代碼的屬性,該屬性應該(並且確實)返回一個int。 (我將int轉換放在它上面進行仔細檢查)但是當我嘗試使用它對獲取進行排序時, cls.query().order(cls.returns_an_int)
出現類型錯誤TypeError: order() expects a Property or query Order; received <property object at 0xsome-hex-address>
TypeError: order() expects a Property or query Order; received <property object at 0xsome-hex-address>
-我嘗試使用+或-來查看是否可以獲取它的值,因為我在其他問題中看到了它,但是它沒有用。 我究竟做錯了什么? 我是否缺少使它正常工作的基本知識?
查詢數據存儲區時,需要查詢各種ndb.Property
類型之一 。 您正在查詢香草python屬性。 這是行不通的,因為python屬性數據永遠不會存儲在數據存儲區中,因此數據存儲區無法按其不知道的數據進行排序。
很難就如何解決這個問題給出明確的建議。 您可以在不使用.order
情況下進行查詢,並在客戶端代碼中進行排序:
return sorted(cls.query(), key=lambda item: item.returns_an_int)
但這不適用於具有大量實體的實體類型。 您也可以將屬性更改為ndb.ComputedProperty
:
@ndb.ComputedProperty
def returns_an_int(self):
some_var = do_something_that_returns_int()
if some_var:
return int(some_var)
else:
return 0
缺點是您要存儲(並支付)更多的數據存儲數據,並且還對每個放置的數據存儲區執行returns_an_int
方法。 如果這是一種快速執行的方法,那應該不成問題,但是,如果這是一種緩慢的方法,您可能會開始注意到其中的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.