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