py2neo, neo4j: 如何在两个已有节点之间创建关系
我正在按照这个教程,用Python访问neo4j数据库。根据这个教程,我在4个节点之间创建了2个关系。下面是代码:
alice, bob, rel = graph_db.create(
{"name": "Alice"}, {"name": "Bob"},
(0, "KNOWS", 1))
dev, carol, rel = graph_db.create(
{"name": "Dev"}, {"name": "Carol Smith"},
(0, "KNOWS", 1))
我想知道怎么在alice和carol之间创建关系,而不需要创建新的节点?
这个教程中给出了一个代码片段,用于在已有节点之间创建关系。我不太确定怎么在上面的情况下使用它。
ref_node = graph_db.get_reference_node()
alice, rel = graph_db.create(
{"name": "Alice"}, (ref_node, "PERSON", 0))
当我尝试执行:
ref_node = graph_db.get_reference_node()
我遇到了以下错误。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'GraphDatabaseService' object has no attribute 'get_reference_node'
有没有什么建议可以解决这个问题?
2 个回答
2
在早期版本的Neo4j和py2neo中,有一个叫做“参考节点”的功能。但这个功能后来被淘汰了,所以我应该把py2neo文档中所有相关的内容都删掉——看来我漏掉了一部分!
谢谢你指出这个问题,我会给自己安排一个任务,把这个页面更新一下。
关于创建关系,Nicole的回答非常准确,里面有你需要的所有信息。
9
我试了以下方法,得到了你想要的结果:
from py2neo import neo4j, node, rel
graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
alice, = graph.create(node(name="Alice")) # Comma unpacks length-1 tuple.
bob, = graph.create(node(name="Bob"))
carol, = graph.create(node(name="Carol Smith"))
dev, = graph.create(node(name="Dev"))
graph.create(rel(alice, "KNOWS", bob))
graph.create(rel(dev, "KNOWS", carol))
graph.create(rel(alice, "KNOWS", carol))
现在我在浏览器中看到的图表是这样的:
另外,你也可以用一个 graph.create()
的语句来创建这个图表:
from py2neo import neo4j, node, rel
graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
graph.create(
node(name="Alice"), #0
node(name="Bob"), #1
node(name="Carol Smith"), #2
node(name="Dev"), #3
rel(0, "KNOWS", 1),
rel(3, "KNOWS", 2),
rel(0, "KNOWS", 2)
)
输出结果是一样的。希望这对你有帮助。