Как удалить узел в Neo4j, используя py2neo? - PullRequest
0 голосов
/ 20 ноября 2018

Использование 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)

Она работает без каких-либо проблем, но ничего не удаляет, и узлы с этими идентификаторами все еще находятся в базе данных, когда я выполняю поиск через браузер.

Я также пытался использовать метод graph.delete() py2neo, но, опять же, я не смог заставить что-либо работать, потому что в документации нет описания или примеров, чтобы заставить его работать.Я даже не смог найти способ получить узлы по идентификаторам в документации.Что-то вроде

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

должно удалить все узлы с меткой "Person", но вместо этого выдает ошибку

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

Так что на самом деле это просто основной вопрос при использовании py2neo, который долженбыть ясно объясненным в документации или руководствах для начинающих, но, опять же, нет примеров использования любого из этих методов, где бы я мог найти.

Как удалить узлы из моей базы данных Neo4j с помощью py2neo?

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы должны .commit()

tx = graph.begin()
matcher = NodeMatcher(graph)
node = matcher.get(node_id)
tx.delete(node)
tx.commit()
0 голосов
/ 25 декабря 2018

Мне удалось удалить узел с 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)

Выможно получить идентификатор любого узла В ГРАФЕ, выполнив это:

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

Просто чтобы было ясно, я использую драйвер neo4j версии 1.6.2

...