簡體   English   中英

使用 Py2Neo 通過合並更新節點

[英]Updating a node with merge using Py2Neo

我正在嘗試使用 py2neo 庫合並然后更新圖形。 我的代碼看起來大致像

from py2neo import Graph, Node, Relationship

graph = Graph(host, auth=(user, password,))

tx = graph.begin()
alice = Node("Person", name="Alice")
bob = Node("Person", name="Bob")
KNOWS = Relationship(alice, "KNOWS", bob)
tx.create(KNOWS)
graph.commit(tx)

這將按預期創建節點和邊

(:Person {name: "Alice"})-[:KNOWS]->(:Person {name: "Bob"})

但是,如果我嘗試在新交易中修改alice ,我不會得到任何改變

例如

new_tx = graph.begin()
alice["age"] = 32
new_tx.merge(alice, "Person", "name")
graph.commit(new_tx)

我懷疑我誤解了Transaction在這里的運作方式。 我希望以上內容等同於找到 Alice 並使用新屬性進行更新或創建一個新節點。

更新:我發現了Graph.push方法,但仍然希望獲得有關最佳實踐的建議。

您需要定義一個主鍵,讓MERGE知道將哪個屬性用作主鍵。 從文檔中:

用於 Cypher MATCH 和 MERGE 操作的主屬性鍵。 如果未定義,則“ id ”的特殊值用於確定內部節點 ID 而非屬性的唯一性。 請注意,這會改變 GraphObject 實例上的 Graph.create() 和 Graph.merge() 等操作的行為。

為每個節點類型定義自定義 class 並在其中定義主鍵可能是最佳做法。

class Person(GraphObject):
    __primarykey__ = "name"

    name = Property()
    born = Property()

    acted_in = RelatedTo(Movie)
    directed = RelatedTo(Movie)
    produced = RelatedTo(Movie)

暫無
暫無

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

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