簡體   English   中英

.order()上的AppEngine Python NDB類型錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM