【问题标题】:DELETE and CREATE Cypher statements in one transaction一个事务中的 DELETE 和 CREATE Cypher 语句
【发布时间】:2017-06-24 13:03:03
【问题描述】:

我正在编写一个 python 3.6 应用程序,它使用 Neo4j 作为后端和官方 python 驱动程序。我是 Neo4j 和 Cypher 的新手。进入数据库的数据需要替换该数据的先前“版本”。我试图通过创建一个根节点来指示版本来做到这一点。例如。

MATCH (root:root_node)-[*..]->(any_node:) DETACH DELETE root, any_node
CREATE(root:new_root_node)
...
...

... 代表我附加到new_root_node 的所有新数据

以上行不通。如何将DELETECREATE 语句合并到一个事务中?

谢谢!

【问题讨论】:

    标签: python database neo4j cypher


    【解决方案1】:

    单个事务中的 DELETE 和 CREATE 语句没有问题。

    这里有两个问题需要解决。

    第一个是(anynode:): 将变量与节点标签分开。如果存在:,则节点标签也必须存在,并且由于此处未提供标签,您会收到错误消息。要解决此问题,请完全删除 :,如下所示:(anynode)

    第二个问题是CREATE(root:new_root_node)。这里的问题是 root 变量已经在您之前的 MATCH 的范围内,因此您需要使用不同的变量。

    此外,您的 :new_root_node 标签似乎没有用,因为之前创建的用于从根节点查询数据的任何查询都需要更改以使用新标签。我感觉您可能对 Neo4j 标签有误解,所以快速回顾一下relevant documentation 可能会有所帮助。

    【讨论】:

    • 感谢您的回复。上面的这段代码是我实际代码的抽象,这样做是为了让它在一个小空间里可读。您已经验证了我正在尝试做的事情应该有效。我将检查我的代码,并确保我没有出现您提到的任何语法错误。
    • 在浏览器中运行它可能会有所帮助,前缀为EXPLAIN。这将让它检查语法错误,但实际上不会运行查询
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多