无法使用py2neo删除具有关系的neo4j节点
Can't delete neo4j nodes with a relationship using py2neo
我正在通过 py2neo 模块学习 neo4j。修改 example,我很困惑为什么会在这里出错。如果我想删除 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 查询工作:
When you want to delete a node and any relationship going to or from it, use 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
您可以在其中 运行 删除整个子图(包括节点)的方法。
它很适合我。
我正在通过 py2neo 模块学习 neo4j。修改 example,我很困惑为什么会在这里出错。如果我想删除 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 查询工作:
When you want to delete a node and any relationship going to or from it, use 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
您可以在其中 运行 删除整个子图(包括节点)的方法。
它很适合我。