我正在尝试让一个事务在AppEngine中工作,而我遇到了实体组的问题。我的代码有点像这样:
parent_obj = ClassA.all().get()
def txn():
key_name = 'hash of something here'
if not db.get(db.Key.from_path('ClassB', key_name, parent=parent_obj)):
obj = ClassB(
parent = parent_obj
)
obj.put()
db.run_in_transaction(txn)
...但我得到'无法在事务中对不同的实体组进行操作'错误。我不明白的是,据我所知,我的交易只对同一组中的实体进行操作。即,第6行使用“父”查询,该父项与第8行中设置的“父”相同,因此两个查询都与同一实体组有关。
我得出结论,我对实体群体的理解是错误的。但是怎么样?我已经多次阅读过这些文档但仍然没有看到我正在做的事情是错误的。
有什么想法吗?谢谢!
答案 0 :(得分:2)
可能会发生这种情况,因为parent_obj
None
和在创建key_name
时没有传递ClassB
。在这种情况下,您有多个实体组(每个没有祖先的实体都是一个单独的组)。
如果parent_obj是None
,那么这将有效:
parent_obj = ClassA.all().get()
def txn():
key_name = 'hash of something here'
if not db.get(db.Key.from_path('ClassB', key_name, parent=parent_obj)):
obj = ClassB(
key_name = key_name,
parent = parent_obj
)
obj.put()
db.run_in_transaction(txn)