【问题标题】:py2neo, neo4j: How to create relation between two existing nodepy2neo,neo4j:如何在两个现有节点之间创建关系
【发布时间】:2014-05-02 12:40:28
【问题描述】:

我正在关注tutorial 使用 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))

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

该教程中给出了以下代码 sn-p 来创建现有节点之间的关系。在上述情况下不知道如何使用。

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'

有解决这个问题的建议吗?

【问题讨论】:

    标签: python neo4j py2neo


    【解决方案1】:

    我尝试了以下方法,得到了我认为你想要的结果:

    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)
    )
    

    而且输出是一样的。希望这会有所帮助。

    【讨论】:

    • 还有一件事,我如何可视化图表?有没有可用的工具?
    • 我会跳进浏览器。这是获得视觉效果的最佳方式。
    • 您正在创建新节点并在它们之间创建关系..如何创建与现有节点的关系?这就是 get_reference_node() 的用途,它发出异常
    【解决方案2】:

    参考节点是 Neo4j 早期版本中包含的一项功能,扩展名为 py2neo。它已被弃用和删除,所以我也应该从 py2neo 文档中删除所有痕迹 - 看来我错过了一个!

    感谢您指出这一点,我将为自己添加一项任务以更新此页面。

    在建立关系方面,妮可的回答很准确,应该包含您需要的所有信息。

    【讨论】:

    • 您好 Nigel,如果不推荐使用 get_reference_node,我如何从 py2neo 创建新节点和现有节点之间的关系?
    • 我想做这样的事情: MATCH (actor:Actor) WHERE actor.name = "Tom Hanks" CREATE (movie:Movie { title:'Sleepless IN Seattle' }) CREATE (actor) -[:ACTED_IN]->(电影);
    • 看起来 Cypher 应该已经可以工作了。最好的办法是在浏览器 (localhost:7474/browser) 中尝试一下,如果遇到特定问题,会弹出一个新的 StackOverflow 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多