我正在尝试使用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
方法,但仍然希望得到关于最佳实践的建议。
1条答案
按热度按时间bjp0bcyl1#
您需要定义一个主键,以便
MERGE
知道哪个属性可以用作主键。用于Cypher MATCH和MERGE操作的主属性键。如果未定义,则使用特殊值“id”来将唯一性与内部节点ID而不是属性联系起来。请注意,这会改变GraphObject示例上的Graph.create()和Graph.merge()等操作的行为。
最好的做法可能是为每个节点类型定义一个自定义类,并在其中定义主键。