我试图使用py2neo引入事务。在要成为事务的代码的开头,我使用:
打开新事务tx = graph.cypher.begin()
之后,采取了几项行动:
虽然操作1-4正确完成,但最后一个操作失败"节点未绑定"。这并不令人惊讶,因为交易尚未提交,并且该节点没有远程对应物。不过,我需要这样做。另一种方法需要大量的重构和意大利面条代码。
使用cypher中的 CreateStatement 在事务I中创建节点。这样做:
graph = db_connection.get_graph()
statement = CreateStatement(graph)
statement.create(relation)
append_to_current_tx(statement)
因此无法获得处于绑定状态的节点(瞬态节点)。
是否有办法读取刚刚未完成的事务中创建的节点的关系(但在同一事务之前创建了所有关系)。 py2neo中是否有嵌套事务?
答案 0 :(得分:1)
您可以使用tx.process()
来完成此操作,gkeyring.py会将所有待处理语句发送到要执行的服务器,但会使事务处于打开状态且未提交。
例如:
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()