如何使用py2neo删除Neo4j中的节点?

时间:2018-11-20 08:53:24

标签: python neo4j py2neo

使用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数据库中删除节点?

  

2 个答案:

答案 0 :(得分:0)

我能够删除ID = 20的节点,如下所示:

from py2neo import Graph, Node, Relationship

# Create graph
graph = Graph(host="localhost", auth=("neo4j", <insert_password>))

# Create nodes
nicole = Node('Person', name='Nicole')
adam = Node('Person', name='Adam')

# Create relationship between 2 nodes
graph.create(Relationship(nicole, 'KNOWS', adam))

# Select node with id = 20
id_20 = graph.evaluate("MATCH (n) where id(n) = 20 RETURN n")

# Delete node
graph.delete(id_20)

对于该功能,它应该可以使用以下功能:

def deleteNode(id):
    node = graph.evaluate("MATCH (n) where id(n) = {} RETURN n".format(id))
    graph.delete(node)

您可以通过执行以下操作来产生图形中任何节点的ID:

node = graph.evaluate("MATCH (n) where id(n) = {} RETURN n".format(id))
node.identity

请明确一点,我使用的是neo4j驱动程序1.6.2版

答案 1 :(得分:0)

您必须.commit()

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