执行程序后,是否可以在py2neo中回滚我的数据库?

时间:2015-10-18 11:24:27

标签: python neo4j cypher rollback py2neo

我正在尝试在 py2neo 中运行cypher查询并克服一些限制。 我实际上想在图表的边缘添加一些权重以进行特定执行但是在执行程序之后我不希望更改保留在我的 neo4j DB 回滚)。 我想要这个以便每次都使用边权重作为参数来运行程序/查询 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这取决于时间。我相信py2neo使用transactional cypher http endpoint。在事务提交或完成之前 之前可以回滚,而不是之后回滚。

因此,假设您正在运行您的密码查询并同时执行其他操作。

tx = graph.cypher.begin()
statement = "some nifty mutating cypher in here"
tx.append(statement)
tx.commit()

当你点击提交时,你已经完成了。数据库不一定像git一样工作,你可以撤消任何以前的过去的更改,或者在某个时间恢复到数据库的先前状态。通常,您正在创建交易,然后您正在提交交易,或者将其回滚。

因此,如果尚未完成/提交事务,则可以回滚事务。这很有用,因为您的交易可能包含8-9个不同的查询,所有查询都会进行更改如果前4个成功,那么#5会失败怎么办?这实际上是事务回滚要解决的问题,将大型多查询更改为原子的,要么全部有效,要么全部无效。

如果这不是您想要的,那么您应该制定第二个密码查询,以撤消您对权重所做的任何更改。一个例子可能是这样的一对查询:

MATCH (a:Node) 
SET a.old_weight=a.weight 
WITH a 
SET a.weight={myNewValue} 
RETURN a;

然后用以下内容撤消它:

MATCH (a:Node) 
SET a.weight=a.old_weight 
WITH a 
DELETE a.old_weight
RETURN a;

这是来自java API的further documentation on transactions,它描述了它们的工作原理。