py2neo, neo4j: 如何在两个已有节点之间创建关系

2 投票
2 回答
10201 浏览
提问于 2025-04-18 05:07

我正在按照这个教程,用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)
)

输出结果是一样的。希望这对你有帮助。

撰写回答