我正在尝试编写一个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
答案 0 :(得分:0)
您没有使用参数。 run() function包含您要查询使用的参数的可选第二参数字典。
此外,在查询本身中,您需要在参数名称前加上$
,以便正确使用:
CALL apoc.load.csv($filename) ...
filename
是run()调用中参数字典中参数的键。