获取ClientError:ProcedureCallFailed:调用过程失败`apoc.periodic.iterate迭代`:未定义文件名

2024-06-01 20:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python脚本,用apoc过程调用将csv文件上传到graphdb中。我想让它充满活力。因此,我有一个函数名CreateNodes(filename,label),它采用csvfile和node label在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")

我已经检查了我的函数和filename,label参数接受传递的值

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

但是当我要跑的时候graphdriver.run文件(查询)用于在graphdb中创建节点

graphdriver.run(query)

我在犯错误

ClientError: ProcedureCallFailed: Failed to invoke procedure 'apoc.periodic.iterate': Caused by: org.neo4j.cypher.internal.v3_5.util.SyntaxException: Variable 'filename' not defined (line 1, column 43 (offset: 42))

也许我在查询中遗漏了什么。事实上我也试过文件名.csv在我的apoc查询中,它成功了。但是我想在cypher查询中传递filename和label变量以获得结果

我正在为neo4j使用py2neo-python驱动程序,我的neo4j版本是3.5.6,apoc过程库版本是3.5.0.4


Tags: 文件csv函数test节点过程filenamequery
1条回答
网友
1楼 · 发布于 2024-06-01 20:56:16

您没有使用参数。run() function接受您希望查询使用的参数的可选第二个参数字典。你知道吗

另外,在查询本身中,您需要在参数名前面加上$,因此正确的用法是:

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

其中filename是run()调用中参数字典中参数的键。你知道吗

相关问题 更多 >