Я пытаюсь выполнить базовую операцию слияния, чтобы добавить несуществующие узлы и отношения к моему графику, просматривая файл 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")
, что дает мне ошибку IndexError: list index out of range
где-то глубоко в исходном коде py2neo (.... site-packages \ py2neo \ internal \ operations.py ", строка 168, в merge_subgraph на node = nodes[i]
). Я пытался выяснить, что там происходит не так, но я не мог понять, откуда появляется список nodes
через различные соединения с другими командами.
Таким образом, в настоящее время он сопоставляет и создает несколько узлов без проблем, но в какой-то момент он будет сопоставляться до тех пор, пока ему не понадобится создать, а затем не сможет создать этот узел (даже если он использует тот же код и делает то же самое вте же обстоятельства в цикле.) Он прошел через все 20 строк в моем примере один раз, но обычно останавливается на строке 3-5.
Я думал, что это как-то связано с транзакциями (см. комментарии),но я получаю ту же проблему при слиянии непосредственно на графике. Может быть, это связано с функцией слияния py2neo, которая находит больше идентификаторов для узлов, чем для узлов.что-то не так с тем, как я указал свой основной ярлык и / или ключ.Поскольку эта ошибка и код непрозрачны, я не знаю, как двигаться дальше.
У кого-нибудь есть какие-либо советы или инструкции по слиянию узлов с py2neo?
Конечно, я хотел бы знать, как исправить мою текущую проблему, но в целом я хотел бы узнать, как использовать этот пакет.Примеры, инструкции, настоящая документация?