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