[英]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.