Получение ClientError: MethodCallFailed: не удалось вызвать процедуру `apoc.periodic.iterate`: имя файла не определено - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь написать скрипт на python для загрузки CSV-файлов в graphdb с помощью вызова процедуры apoc. Я пытаюсь сделать это динамичным. Итак, у меня есть имя функции CreateNodes (имя файла, метка), которая принимает csvfile и метку узла для создания NODE в graphdb для данного запроса

Мой код указан ниже

def CreateNodes(filename,label):
    print(filename,label)
    print(type(filename),type(label))
    nodequery="""CALL apoc.periodic.iterate('CALL apoc.load.csv(filename) yield map as row return row','CREATE (p:label) SET p = row', {batchSize:10000, iterateList:true, parallel:true})"""
    return nodequery


query=CreateNodes("test.csv","NODE1")

Я проверил мою функцию и имя файла, а параметр метки принимает передаваемое значение

query=CreateNodes("test.csv","NODE1")
test.csv NODE1
<class 'str'> <class 'str'>

но когда я собираюсь запустить graphdriver.run (запрос) для создания узла в graphdb

graphdriver.run(query)

Я получаю ошибку ниже

ClientError: ПроцедураCallFailed: не удалось вызвать процедуру «apoc.periodic.iterate»: вызвано: org.neo4j.cypher.internal.v3_5.util.SyntaxException: переменная «имя файла» не определена (строка 1, столбец 43 (смещение : 42))

возможно, я что-то упустил в запросе. На самом деле я также пробовал явное имя файла .csv в моем запросе apoc, тогда он работал. но я хочу передать имя файла и переменную метки в запросе шифра для получения результата

Я использую py2neo python driver для neo4j, и моя версия neo4j - 3.5.6, а моя версия библиотеки процедур apoc - 3.5.0.4

1 Ответ

0 голосов
/ 08 июля 2019

Вы не используете параметры.Функция run () принимает необязательный второй словарь параметров, который вы хотите использовать в запросе.

Кроме того, в самом запросе необходимо добавить префикс имени параметра к $, поэтому правильное использование будет:

CALL apoc.load.csv($filename) ...

Где filename - ключ параметра в словаре параметров в вашем вызове run ().

...