如何使用py2neo v4和Neo4j合并节点和关系

时间:2018-11-27 07:19:19

标签: python-3.x neo4j py2neo

我正在尝试执行基本的合并操作,以通过逐行浏览一个csv文件来向我的图形添加不存在的节点和关系。我正在使用py2neo v4,并且因为基本上没有有关如何使用py2neo的文档或示例,所以我不知道如何真正完成它。这不是我的真实代码(处理许多不同情况非常复杂),但其结构基本上是这样的:

import py2neo as pn
graph = pn.Graph("bolt://localhost:###/", user="neo4j", password="py2neoSux")
matcher = pn.NodeMatcher(graph)
tx = graph.begin()

if (matcher.match("Prefecture", name="foo").first()) == None):
  previousNode = pn.Node("Type1", name="fo0", yc=1)
else:
  previousNode = matcher.match("Prefecture", name="foo").first())

thisNode = pn.Node("Type2", name="bar", yc=1)
tx.merge(previousNode)  
tx.merge(thisNode)  
theLink = pn.Relationship(thisNode, "PARTOF", previousNode)
tx.merge(theLink)
tx.commit() 

当前这会引发错误 ValueError: Primary label and primary key are required for MERGE operation 第一次需要合并未找到的节点(即在创建节点时)。因此,我将行更改为:

tx.merge(thisNode,primary_label=list(thisNode.labels)[0], primary_key="name")  

这是从py2neo源代码(.... site-packages \ py2neo \ internal \ operations.py“,行{168,}在IndexError: list index out of range的深处给我带来的错误node = nodes[i] )。我试图找出那里出了什么问题,但是我无法通过各种与其他命令的连接来解读nodes列表的出处。

因此,它当前会匹配并创建几个节点,而不会出现问题,但是在某个时候它将匹配直到需要创建,然后尝试创建该节点失败(即使它使用相同的代码并执行相同的操作)相同条件下的事物循环)。它一次进入了样本中的所有20行,但通常停在3-5行。

我认为这与事务有关(请参阅注释),但是当我直接在图形上合并时,我遇到了同样的问题。也许这与py2neo合并功能有关,该功能为节点找到的标识比节点更多。我指定主要标签和/或密钥的方式可能有问题。 因为此错误和代码不透明,所以我不知道该如何前进。

  

有人对将节点与py2neo合并有任何建议或指示吗?

当然,我想知道如何解决当前问题,但更一般而言,我想学习如何使用此软件包。示例,说明,真实文档?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,只是弄乱了头发以找出问题所在!所以!我了解到的是,至少在我的情况下,也许是您的情况,因为我们收到了类似的错误消息,并且在做类似的事情。该问题对我造成了隐患,因为我试图创建一个WWWForm form = new WWWForm(); form.AddBinaryData("fileUpload", texture.EncodeToPNG()); UnityWebRequest req = UnityWebRequest.Post(link,form); req.SetRequestHeader("Prediction-Key", Base64String("xxxxxxxxxxxxxxxxxxxxxxxx"); yield return req.SendWebRequest(); 字段,该字段的Node字段名称与其他字段不同。

伪示例:

__primarykey__

我希望这会有所帮助,很明显,我仍然可以从所有事情中恢复过来。如果不清楚,请告诉我,我会进行修改。

祝你好运。