-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