-1

GAE Python中是否有替代方法/策略可用於實現與「transaction」中提供的相同的替代方法?
在GAE中,「事務」有助於確保事務內的所有NDB操作成功或全部回滾。
由於實體組計數限制爲5(xg),我不能在我的代碼中的許多地方使用「事務」,因爲我覺得這是需要的。
欣賞你的時間。GAE交易替代方案以克服實體組限制5

一個用例

class A(ndb.Model): 
    :: # Some Properties 

class B(ndb.Model): 
    :: # Some Properties 

class C(ndb.Model): 
    :: # Some Properties 

class D(ndb.Model): 
    :: # Some Properties 

class E(ndb.Model): 
    :: # Some Properties 

class F(ndb.Model): 
    :: # Some Properties 

class G(ndb.Model): 
    :: # Some Properties 

class create_new_x (BaseRequestHandler): 
    @ndb.toplevel 
    def get(self): 
     :: 
     a1 = A (id="x", p1=v1, .. , pn=vn) 
     a1.put_async() 

     b1 = B (id="y", p1=v1, .. , pn=vn) 
     b1.put_async() 

     :: 
     g1 = G (id="z", p1=v1, .. , pn=vn) 
     g1.put_async() 

     return 

當我創建一個新的實體(比如, 「A1」)模式 「A」 的,我也創建實體(比如, 「B1」,「C1在相同的用戶請求中的型號「B」,「C」,「D」,「E」,「F」,「G」中的「D1」,「E1」,「F1」,「G1」) I不希望爲實體「B1」,「C1」,D1「,」E1「,」F1「,」G1「分配父代。如果我將它們分配給父母(如「A1」),那麼只要我想要得到任何「B1」,「C1」,D1「,」E1「,」F1「,」G1「 」這是因爲我們需要在指定的祖先鍵‘get_by_id’

+1

我的後裔猜測這是因爲你的問題非常廣泛,任何建議都必須針對你的實現。代碼示例很有幫助。 – user3058197

+0

@ user3058197感謝您的幫助。我用更多的信息更新了這個問題。我已經添加了我的代碼的這樣一部分的類似示例。 – gsinha

+1

如果使用指定的鍵創建父模型,則可以使用該鍵(手動構建鍵)作爲get_by_id中的父項,而不實際檢索它。它甚至不需要像那樣使用它。 –

回答

1

您可以通過構建用手一鍵,包括祖先路徑檢索實體:

rev_key = ndb.Key('Account', 'Sandy', 'Message', 'greeting', 'Revision', '2') 
address = ndb.get(rev_key) 

您也可以使用命名參數parent指定的任何實體直接祖先路徑。

k2 = ndb.Key(Revision, '2', parent=ndb.Key('Account', 'Sandy', 'Message', 'greetings')) 

鏈不必父它可以以這種方式使用,但通常你會創建它(例如,作爲父母的書籍作爲兒童)作爲設置的一部分。但如果它的名字可以預先確定,你可以使用它。

您可以過濾庫查詢到指定的祖先,這樣 返回的結果將只包括實體從 祖先

https://developers.google.com/appengine/docs/python/ndb/entities

Google Appengine NDB ancestor vs key query