【问题标题】:Is a Rollback of my database possible in py2neo after execution of program?执行程序后是否可以在 py2neo 中回滚我的数据库?
【发布时间】:2015-10-18 11:24:27
【问题描述】:

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

【问题讨论】:

    标签: python neo4j cypher rollback py2neo


    【解决方案1】:

    这取决于时间。我相信 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,它更详细地描述了它们的工作原理。

    【讨论】:

    • 我发现你的回答真的很有帮助。实际上,我的目的是运行 dijkstraa 算法来计算每个节点与起始节点相比的一些分数(可能的最小分数)。因此,在我提交之前撤消对权重的更改可能对我有用!提前致谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2011-07-08
    相关资源
    最近更新 更多