繁体   English   中英

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

[英]How to delete a node in Neo4j using 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数据库中删除节点?

我能够删除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-driver版本1.6.2

您必须.commit()

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

暂无
暂无

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

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