【问题标题】:How to return node from py2neo graph query?如何从 py2neo 图查询返回节点?
【发布时间】:2016-07-20 14:27:35
【问题描述】:

我如何使用结果并将其转换为来自graph.run 的节点或关系,例如。

result = graph.run('match (x:Person) return x')

如何将结果转换为 Py2neo v3 节点/关系?

【问题讨论】:

    标签: python-2.7 neo4j py2neo


    【解决方案1】:

    从查询中获取节点的最简单方法是使用evaluate 而不是run

    my_node = graph.evaluate('match (x:Person) return x')
    

    此方法从返回的第一条记录中返回第一个值。在这种情况下,您的节点。

    http://py2neo.org/v3/database.html#py2neo.database.Graph.evaluate

    【讨论】:

    • 我们是否也可以使用graph.evaluate()检索关系??
    • 类似:my_rel= graph.evaluate('match (:Person {name:"Foo"})-[rel]->(:Person {name:"Bar"}) return r')
    • 我试过了,但是如果我尝试删除返回的关系,我会收到错误
    • rel = graph.evaluate("match (x:XaudioUser)-[m:MAINTAINS]->(p) return m") print rel graph.delete(rel) 在运行这个我得到ConstraintError: Cannot delete node<3>, because it still has relationships. To delete this node, you must first delete its relationships. 因为关系也包含节点,但是我只想检索关系
    • 找到解决方案:在获得关系后使用graph.separate(rel)。谢谢,我只是py2neo的初学者
    【解决方案2】:

    对于Py2neo 1.6.7,您可以使用GraphDatabaseService 的方法find 迭代一组标记节点,可选择按属性键和值进行过滤,例如:

    from py2neo import neo4j
    # pass the base URI of your neo4j database as arg
    graph_db = neo4j.GraphDatabaseService('http://localhost:7474/db/data/') 
    resultset = graph_db.find('Person')
    

    对于Py2neo 3.0,您可以使用Graph 的方法find,该方法生成所有具有给定标签的节点,可选择按属性键和值进行过滤。因此,对于您的示例:

    from py2neo import Graph
    graph_db = Graph("http://localhost:7474/db/data/")
    resultset = graph_db.find('Person')
    

    最后,来自官方文档的一个重要警告

    还要注意,Py2neo 是专门在 Linux 下开发和测试的 使用标准 CPython 发行版。虽然其他操作系统和 Python 发行版也可以工作,但不提供对这些的支持。

    【讨论】:

    • acc。到新的 api neo4j 不存在 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name neo4j
    • 我正在寻找一种方法来相应地解析/将其转换为节点/关系
    • 结果集是一个迭代器,输出节点/rels。
    • 我正在使用 py2neo 版本 3.1.1 。当我尝试导入 neo4j 时,它会给出以下 >>> from py2neo import neo4j Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name neo4j
    • neo4j 在 v3 中不存在您所说的可能与 py2neo v2 一起使用
    【解决方案3】:

    另一种方法是根据 cypher.execute 返回的生成器生成列表。

    result = graph.cypher.execute('match (x:Person) return x')
    nodes = [n for n in result]
    

    请注意,像这样查询的节点是记录。要访问真实节点,请选择每个对象的属性 r。 :

    l_nodes = map(lambda node : node.r, nodes)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多