0

我的工作在App Engine上一個Python NDB模型,看起來像:查詢GAE數據儲存轉化屬性值

class NDBPath(ndb.Model): 
    path = ndb.StringProperty() 
    directory = ndb.ComputedProperty(lambda self: getDirectory(self.path)) 
    cat = ndb.IntegerProperty(indexed=False) 

路徑是文件路徑,目錄是文件的superdirectory,和貓一些數字。這些實體只有在初始加載後纔有效讀取。

我查詢各種文件路徑的數據存儲,並要拉出來一個實體的cat財產如果任一)其路徑的查詢路徑(同一個文件)相匹配,或者b)如果實體的目錄中的一個superdirectory查詢路徑。所以,我最終會做一個查詢,如:

NDBPath.query(NDBPath.directory.IN(generateSuperPaths(queriedPath))) 

凡generateSuperPaths列出他們的查詢路徑的完整形式全部superdirectories(如a/b/c/d.html --> [/a, /a/b, /a/b/c]

因爲這些是隻讀的,用計算出的屬性是有效的浪費寫作,因爲它永遠不會改變。有什麼辦法基於動態轉化值查詢,像

NDBPath.query(getDirectory(NDBPath.path).IN(generateSuperPaths(queriedPath))) 

這樣我就可以節省寫目錄的屬性,只是使用它的查詢?

回答

0

AFAIK,是的。他們最終會做同樣的事情,它會節省您的寫作時間和成本。雖然它會讓你的查詢運行速度變慢(因爲增加了計算),所以要注意可能的超時。

+0

不確定'yes'是什麼意思。計算屬性的添加完全是因爲「對已轉換值的查詢」在其他情況下是不可能的 - 例如getDirectory(NDBPath.path)將失敗(因爲getDirectory被非'str'調用)並且沒有辦法「將函數發送到數據存儲區」以在那裏應用以幫助您的查詢! – 2014-12-27 20:57:22