繁体   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