簡體   English   中英

無法使用py2neo刪除具有關系的neo4j節點

[英]Can't delete neo4j nodes with a relationship using py2neo

我正在通過py2neo模塊學習neo4j。 修改這個例子 ,我很困惑為什么我在這里收到錯誤。 如果我想刪除Person類型的所有節點,為什么我不能遍歷圖形並刪除符合我標准的圖形? 如果刪除節點之間的關系,代碼運行正常。

from py2neo import Node, Relationship, Graph

g = Graph("http://neo4j:test@localhost:7474/db/data/")
g.delete_all()

alice = Node("Person", name="Alice")
bob   = Node("Person", name="Bob")
g.create(Relationship(alice, "KNOWS", bob)) # Works if this is not present

for x in g.find("Person"):
    print x
    g.delete(x)

這失敗並出現錯誤:

  File "start.py", line 12, in <module>
    g.delete(x)
  ...
py2neo.error.TransactionFailureException: Transaction was marked as successful, but unable to commit transaction so rolled back.

您需要先刪除關系,然后才能刪除節點。

這是Neo4j中的標准行為,可以防止孤立關系。

您可以通過發出Cypher查詢來執行此操作:

graph.cypher.execute("MATCH (n:Person) OPTIONAL MATCH (n)-[r]-() DELETE r,n")

或者(但不是100%確定你可以在不知道rel類型和結束節點的情況下)使用py2neo Store:

    store = Store(g)
    rels = store.load_related(alice)
    for r in rels
    g.delete(r)

    g.delete(alice)

商店load_related的正常腳本是:

store.load_related(alice, "LIKES", Person)

根據文檔,這應該作為一個簡單的CYPER查詢:

如果要刪除節點以及與之相關的任何關系,請使用DETACH DELETE。

MATCH (n:Person)
DETACH DELETE n

http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-with-all-its-relationships

我認為這個問題已經完全用py2neo版本3解決了。

見手冊: http//py2neo.org/v3/database.html#the-graph

您可以在整個子圖(包括節點)上運行delete方法。

它對我很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM