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

qma*_*ruf 2 python neo4j py2neo

我正在按照本教程使用python访问neo4j db.根据这个教程,我在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))
Run Code Online (Sandbox Code Playgroud)

如何在不创建新节点的情况下创建alice和carol之间的关系?

下面的代码片段在该教程中给出,用于创建现有节点之间的关系.在上面的例子中不确定如何使用它.

ref_node = graph_db.get_reference_node()
alice, rel = graph_db.create(
                {"name": "Alice"}, (ref_node, "PERSON", 0))
Run Code Online (Sandbox Code Playgroud)

当我尝试执行时

ref_node = graph_db.get_reference_node()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'GraphDatabaseService' object has no attribute 'get_reference_node'
Run Code Online (Sandbox Code Playgroud)

有什么建议可以解决这个问题吗?

Nic*_*ite 8

我尝试了以下内容并得到了我认为你想要的结果:

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))
Run Code Online (Sandbox Code Playgroud)

我的图表现在在浏览器中显示如下:

在此输入图像描述

或者,您可以在一个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)
)
Run Code Online (Sandbox Code Playgroud)

输出是一样的.希望这可以帮助.