py2neo返回创建的节点和关系数

时间:2015-05-05 10:13:40

标签: neo4j cypher py2neo

我需要创建一个python函数,以便它添加节点和与图形的关系,并返回创建的节点和关系的数量。

我已经使用graph.cypher.execute()添加了节点和关系。

arr_len = len(dic_st[story_id]['PER'])                  
for j in dic_st[story_id]['PER']:
    graph.cypher.execute("MERGE (n:PER {name:{name}})",name = j[0].upper())     #creating the nodes of PER in the story
    print j[0]    
for j in range(0,arr_len):
    for k in range(j+1,arr_len):
        graph.cypher.execute("MATCH (p1:PER {name:{name1}}), (p2:PER {name:{name2}}) WHERE upper(p1.name)<>upper(p2.name) CREATE UNIQUE (p1)-[r:in_same_doc {st_id:{st_id}}]-(p2)", name1=dic_st[story_id]['PER'][j][0].upper(),name2=dic_st[story_id]['PER'][k][0].upper(),st_id=story_id)     #linking the edges for PER nodes

我需要的是返回新节点和创建的关系的数量。

我从neo4j文档中得知的是,有一些名为&#34; ON CREATE&#34;和#34; ON MATCH&#34;对于加密的MERGE,但这不是很有用。 neo4j的浏览器界面确实显示节点数和关系更新。这是我需要返回的内容,但我没有完全接触它。

请帮助。

3 个答案:

答案 0 :(得分:0)

如果您需要创建或更新属性的确切计数,则使用“匹配”与“创建”或“匹配”与“设置”,然后计算结果的大小。合并可能不会返回哪些更新以及哪些更新。

答案 1 :(得分:0)

当您postCypher endpoint of the neo4j REST API进行查询而不使用py2neo时,可以在帖子请求中包含参数"includeStats": true以获取节点/关系统计信息。有关示例,请参阅this question

据我所知,py2neo目前不支持Cypher查询的其他参数(即使它在引擎盖下使用相同的API端点)。

在Python中,你可以做这样的事情(使用requests和json包):

import requests
import json

payload = {
    "statements": [{
            "statement": "CREATE (t:Test) RETURN t",
            "includeStats": True
        }]
    }

r = requests.post('http://your_server_host:7474/db/data/transaction/commit',
                   data=json.dumps(payload))

print(r.text)

响应将包括有关创建的节点数等的统计信息。

{  
   "stats":{  
      "contains_updates":true,
      "nodes_created":1,
      "nodes_deleted":0,
      "properties_set":1,
      "relationships_created":0,
      "relationship_deleted":0,
      "labels_added":1,
      "labels_removed":0,
      "indexes_added":0,
      "indexes_removed":0,
      "constraints_added":0,
      "constraints_removed":0
   }
}

答案 2 :(得分:0)

使用x = session.run(...)执行查询后,您可以使用x.summary.counters获取Martin Perusse答案中记录的统计信息。请参阅文档here

在旧版本中,计数器可用作x._summary.counters下的“私人”字段。