我正在尝试执行基本的合并操作,以通过逐行浏览一个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合并有任何建议或指示吗?
当然,我想知道如何解决当前问题,但更一般而言,我想学习如何使用此软件包。示例,说明,真实文档?
答案 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__
我希望这会有所帮助,很明显,我仍然可以从所有事情中恢复过来。如果不清楚,请告诉我,我会进行修改。
祝你好运。