正在获取ClientError:ProcedureCallFailed:无法调用过程`apoc.periodic.iterate`:文件名未定义

时间:2019-07-07 18:52:08

标签: python neo4j py2neo

我正在尝试编写一个python脚本,以通过apoc过程调用将csv文件上传到graphdb。我正在尝试使其充满活力。因此,我有一个函数名称CreateNodes(filename,label),该函数使用一个csvfile和节点标签在给定查询的graphdb中创建NODE

我的代码如下

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(query)在graphdb中创建节点时

graphdriver.run(query)

我遇到错误了

  

ClientError:ProcedureCallFailed:无法调用过程'apoc.periodic.iterate':由以下原因引起:org.neo4j.cypher.internal.v3_5.util.SyntaxException:未定义变量'filename'(第1行,第43列(偏移量) :42))

也许我在查询中丢失了一些东西。实际上,我也曾在我的apoc查询中尝试过显式filename.csv,然后它起作用了。但我想在密码查询中传递文件名和标签变量以获取结果

我正在将py2neo python驱动程序用于neo4j,我的neo4j版本是3.5.6,而我的apoc过程库版本是3.5.0.4

1 个答案:

答案 0 :(得分:0)

您没有使用参数。 run() function包含您要查询使用的参数的可选第二参数字典。

此外,在查询本身中,您需要在参数名称前加上$,以便正确使用:

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

filename是run()调用中参数字典中参数的键。