如何使用py2neo v4和Neo4j合并节点和关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用py2neo v4和Neo4j合并节点和关系相关的知识,希望对你有一定的参考价值。
我试图执行一个基本的合并操作,通过逐行浏览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源代码深处某处的错误IndexError: list index out of range
(.... site-packages py2neo internal operations.py“,第168行,在node = nodes[i]
的merge_subgraph中)。我试图弄清楚出了什么问题那里,但我无法破译nodes
列表来自其他命令的各种连接。
因此,它当前匹配并创建一些节点没有问题,但在某些时候它将匹配,直到它需要创建然后尝试创建该节点失败(即使它使用相同的代码并在其下执行相同的操作循环中的相同情况)。它在我的样本中通过了所有20行,但通常在第3-5行停止。
我认为它与事务有关(参见注释),但是当我直接在图上合并时,我遇到了同样的问题。也许它与py2neo合并函数有关,它为节点找到了比节点更多的身份。也许我如何指定我的主要标签和/或密钥有问题。因为这个错误和代码是不透明的,我不知道如何前进。
任何人都有关于使用py2neo合并节点的任何建议或指示?
当然我想知道如何解决我当前的问题,但更一般地说我想学习如何使用这个包。示例,说明,真实文档?
我有一个类似的问题,刚刚完成了我的头发,弄清楚出了什么问题!所以!我学到的是至少在我的情况下......也许是你的,因为我们得到了类似的错误消息并且做了类似的事情。问题在于我,因为我试图创建一个Node
,其中__primarykey__
字段的字段名称与其他字段不同。
PSEUDO示例:
# in some for loop or complex code
node = Node("Example", name="Test",something="else")
node.__primarykey__ = "name"
<code merging or otherwise creating the node>
# later on in the loop you might have done something like this cause the field was null
node = Node("Example", something="new")
node.__primarykey__ = "something"
我希望这会有所帮助,并且很明显我仍然会从围绕着事物的过程中恢复过来。如果不清楚,请告诉我,我会修改。
祝好运。
以上是关于如何使用py2neo v4和Neo4j合并节点和关系的主要内容,如果未能解决你的问题,请参考以下文章