2013-08-03 25 views
1

我試着在ndb事務中運行一個包含這一行的函數。我得到AttributeError: 'Key' object has no attribute 'reference',我可以看到它是由於這條線。在ndb事務中訪問管道對象

pipeline = MyPipeline.from_id(pipline_id)

MyPipelinemapreduce.base_handler.PipelineBase一個子類(從映射精簡庫)。

但是,這沒有交易運行良好。在ndb事務中訪問管道對象是不可能的?

回答

2

您可以在事務之前檢索管道,並從事務中引用它。

pipeline = MyPipeline.from_id(pipeline_id) 

@ndb.transactional(retries=5) 
def _tx(): 
    # do stuff to pipeline 
    # ... 

_tx() 

你看到失敗的原因是由於一個事實,即MapReduce的管道與分貝,不NDB實現。

如果通過.from_id()獲取管道失敗,代碼將引發異常,並且您的事務將不會首先運行 - 這正是您想要的。

使用事務的好處通常是知道是否將更改應用於跨實體集的數據存儲。在這種情況下獲取實體 - 管道不是修改任何數據的操作。