2016-02-16 14 views
0

我試圖介紹一個使用py2neo的交易。在代碼的開頭是事務我使用打開新的交易:讀取尚未提交的同一交易中修改的數據

tx = graph.cypher.begin() 

後面還有采取了幾項措施:

  1. 讀取已存儲在數據庫中的某些數據事務已經啓動
  2. 創建基於
  3. 新節點創建另一個節點
  4. 創建這兩個節點之間的關係
  5. 閱讀使用node.match_outgoing(relation_type)這種關係

雖然動作1-4被正確地完成,最後一個「未綁定節點」上失敗。這並不令人驚訝,因爲事務還沒有被提交,並且該節點沒有遠程對應方。不過,我需要這樣做。另一種方法需要大量的重構和意大利麪代碼。

用於在交易節點我使用的createStatement從cypher.It的完成這樣的:

graph = db_connection.get_graph() 
statement = CreateStatement(graph) 
statement.create(relation) 
append_to_current_tx(statement) 

所以沒有得到那個是束縛般狀態的節點的方式(瞬時一)。

是否有一種方法可以讀取剛創建的節點的關係,該節點仍然未被取消(但它的所有關係都是在同一個事務中創建的)。 py2neo中是否有嵌套事務?

回答

1

您可以通過tx.process()完成此操作,它會將所有掛起的語句發送到要執行的服務器,但會使事務處於打開狀態並且未提交。

例如:

tx = graph.cypher.begin() 
tx.append('CREATE (:Person{name: 'Bob'})-[r:EATS]->(:Food {name: 'Pizza'}) SET r.count=1') 
tx.append(''' 
    MATCH (:Person{name: 'Bob'})-[r:EATS]->(:Food {name: 'Pizza'}) 
    SET r.count = r.count + 1 
    RETURN r.count AS count 
''') 
result = tx.process() 
for record in result: 
    print(record.one) # count will be 2 even though the transaction has not been committed 
tx.commit() 
+0

啊,但使用節點= graph.create(節點)我能得到一個綁定的節點,並使用交易我不能做到這一點。我留下了一個沒有綁定到任何遠程對象的節點。我是否需要單獨的查詢來再次檢索此實體...? – kboom