【发布时间】:2015-10-18 11:24:27
【问题描述】:
我正在尝试在 py2neo 中运行密码查询并克服一些限制。 我实际上想为我的图表的边缘添加一些 权重 以进行特定的执行,但是在程序执行之后我不希望更改保留在我的 neo4j DB(回滚)。 我想要这个以便每次以边缘权重作为参数运行程序/查询 提前致谢!
【问题讨论】:
标签: python neo4j cypher rollback py2neo
我正在尝试在 py2neo 中运行密码查询并克服一些限制。 我实际上想为我的图表的边缘添加一些 权重 以进行特定的执行,但是在程序执行之后我不希望更改保留在我的 neo4j DB(回滚)。 我想要这个以便每次以边缘权重作为参数运行程序/查询 提前致谢!
【问题讨论】:
标签: python neo4j cypher rollback py2neo
这取决于时间。我相信 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,它更详细地描述了它们的工作原理。
【讨论】: