【发布时间】:2018-11-27 07:19:19
【问题描述】:
我正在尝试通过逐行浏览 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 行。
我认为它与事务有关(请参阅 cmets),但是当我直接在图表上合并时遇到了同样的问题。也许它与 py2neo 合并函数为节点找到比节点更多的身份有关。也许我指定主要标签和/或键的方式有问题。 因为这个错误和代码是不透明的,我不知道如何前进。
有人对将节点与 py2neo 合并有任何建议或说明吗?
当然我想知道如何解决我当前的问题,但更一般地说,我想学习如何使用这个包。示例、说明、真实文档?
【问题讨论】:
-
所以,Python 崩溃了,所以我重新启动内核并再次运行程序(没有更改任何其他内容),它能够完成我的示例数据运行而没有错误。然后,我调整了代码以修复名称,重新运行代码,同样的
list index out of range错误又出现了。 -
这又发生了,Python崩溃时Neo4j浏览器无法与bd交互,所以真正的问题似乎是事务而不是合并///太糟糕了没有真正的关于如何使用交易的文档。
标签: python-3.x neo4j py2neo