繁体   English   中英

无法使用py2neo删除具有关系的neo4j节点

[英]Can't delete neo4j nodes with a relationship using py2neo

我正在通过py2neo模块学习neo4j。 修改这个例子 ,我很困惑为什么我在这里收到错误。 如果我想删除Person类型的所有节点,为什么我不能遍历图形并删除符合我标准的图形? 如果删除节点之间的关系,代码运行正常。

from py2neo import Node, Relationship, Graph

g = Graph("http://neo4j:test@localhost:7474/db/data/")
g.delete_all()

alice = Node("Person", name="Alice")
bob   = Node("Person", name="Bob")
g.create(Relationship(alice, "KNOWS", bob)) # Works if this is not present

for x in g.find("Person"):
    print x
    g.delete(x)

这失败并出现错误:

  File "start.py", line 12, in <module>
    g.delete(x)
  ...
py2neo.error.TransactionFailureException: Transaction was marked as successful, but unable to commit transaction so rolled back.

您需要先删除关系,然后才能删除节点。

这是Neo4j中的标准行为,可以防止孤立关系。

您可以通过发出Cypher查询来执行此操作:

graph.cypher.execute("MATCH (n:Person) OPTIONAL MATCH (n)-[r]-() DELETE r,n")

或者(但不是100%确定你可以在不知道rel类型和结束节点的情况下)使用py2neo Store:

    store = Store(g)
    rels = store.load_related(alice)
    for r in rels
    g.delete(r)

    g.delete(alice)

商店load_related的正常脚本是:

store.load_related(alice, "LIKES", Person)

根据文档,这应该作为一个简单的CYPER查询:

如果要删除节点以及与之相关的任何关系,请使用DETACH DELETE。

MATCH (n:Person)
DETACH DELETE n

http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-with-all-its-relationships

我认为这个问题已经完全用py2neo版本3解决了。

见手册: http//py2neo.org/v3/database.html#the-graph

您可以在整个子图(包括节点)上运行delete方法。

它对我很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM