首页 > 解决方案 > 如何使用 py2neo 删除 Neo4j 中的节点?

问题描述

使用 py2neo v4 连接到我的 Neo4j 数据库,我无法通过 py2neo 删除节点,运行在浏览器中的 Cypher 中运行良好的查询。当然,Neo4j 或 py2neo 都没有真正的文档,所以希望我能在这里得到一些帮助。有类似的问题,但从那时起 Neo4j 和 py2neo 都有新版本,这些问题/答案要么针对其他特定情况,要么是过时的方法。

首先,我定义了这个函数:

def deleteNode(thisNodeID):
    graph.run("MATCH (n) where id(n) = $nodeID DETACH DELETE n", 
     parameters={"nodeID":thisNodeID})

然后我像这样调用函数:

badObjectIDs = [268569,268535,268534]
for badID in badObjectIDs:
    deleteNode(badID)

这运行没有任何问题,但不会删除任何内容,并且当我通过浏览器搜索时,具有这些 ID 的节点仍在数据库中。

我也尝试过使用 py2neo 的graph.delete()方法,但我还是无法让任何东西工作,因为文档中没有描述或示例来让它工作。我什至找不到通过文档中的 ID 获取节点的方法。类似的东西

graph.delete(matcher.match("Person"))

应该删除所有带有“Person”标签的节点,但它会引发错误

TypeError: No method defined to delete object <py2neo.matching.NodeMatch object at 0x0000026F52A8DC50>

所以这实际上只是使用 py2neo 的一个基本问题,应该在文档或初学者教程中清楚地解释,但同样,在我能找到的任何地方都没有使用这些方法的示例。

如何使用 py2neo 从我的 Neo4j 数据库中删除节点?

标签: pythonneo4jpy2neo

解决方案


你必须.commit()

tx = graph.begin()
matcher = NodeMatcher(graph)
node = matcher.get(node_id)
tx.delete(node)
tx.commit()

推荐阅读