【问题标题】:Getting ProcedureCallFailed: Failed to invoke procedure : Caused by: org.neo4j.cypher.internal.v3_5.util.SyntaxException:获取 ProcedureCallFailed:调用过程失败:原因:org.neo4j.cypher.internal.v3_5.util.SyntaxException:
【发布时间】:2019-07-08 09:03:24
【问题描述】:

我正在尝试将节点从 csv 文件动态上传到 neo4j graphdb。所以我正在开发一个脚本。这是我的代码

def CreateNodes(filename,label):
    print(filename,label)
    print(type(filename),type(label))
    path=nodesourcefolder+filename
    print(path)
    #filestring=nodesourcefolder+filename
    if(isfile(path)==True):
        print("valid")
        #nodequery="""CALL apoc.periodic.iterate('CALL apoc.load.csv(%s) yield map as row return row','CREATE (p:%s) SET p = row', {batchSize:10000, iterateList:true, parallel:true})"""%(path,label)
        nodequery="""CALL apoc.periodic.iterate('CALL apoc.load.csv("""+path+""") yield map as row return row','CREATE (p:"""+label+""") SET p = row', {batchSize:10000, iterateList:true, parallel:true})"""

        print(nodequery)
    return nodequery   

query=CreateNodes("test.csv","myNode")
graphdriver.run(query)

查询变量给了我值 test.csv MyNode

输出

<class 'str'> <class 'str'>
/Users/kalyan.admin/NEO4J_HOME/import/test.csv
valid
CALL apoc.periodic.iterate('CALL apoc.load.csv(/Users/kalyan.admin/NEO4J_HOME/import/test.csv) yield map as row return row','CREATE (p:myNode) SET p = row', {batchSize:10000, iterateList:true, parallel:true})

当我要运行图形 driver.run(query)

我收到以下错误

**ProcedureCallFailed: Failed to invoke procedure `apoc.periodic.iterate`: Caused by: org.neo4j.cypher.internal.v3_5.util.SyntaxException: Invalid input 'U': expected '*' or '/' (line 1, column 44 (offset: 43))**

当我将文件名、标签名传递给 Createnode 函数时,我已经获得了一个字符串文件路径名和标签值。但是我的图形驱动程序无法创建节点

请帮我解决这个问题。我已经尝试了两个节点查询操作,其中一个现在被注释掉了,但是所有这些查询在运行 Graphdriver 后给了我相同的结果

【问题讨论】:

    标签: python-3.x neo4j py2neo neo4j-apoc


    【解决方案1】:

    您的密码查询存在语法问题,文件的路径应该是字符串。

    这是无效的:

    CALL apoc.periodic.iterate(
      'CALL apoc.load.csv(/Users/kalyan.admin/NEO4J_HOME/import/test.csv) yield map as row return row',
      'CREATE (p:myNode) SET p = row', 
      {batchSize:10000, iterateList:true, parallel:true}
    )
    

    而这是(注意路径周围的双引号):

    CALL apoc.periodic.iterate(
      'CALL apoc.load.csv("/Users/kalyan.admin/NEO4J_HOME/import/test.csv") yield map as row return row',
      'CREATE (p:myNode) SET p = row', 
      {batchSize:10000, iterateList:true, parallel:true}
    )
    

    【讨论】:

    • 感谢您的回复,但我的路径变量已经是一个字符串 /Users/kalyan.admin/NEO4J_HOME/import/test.csv 类型 您能否详细说明一下。如何在调用 apoc 查询中插入路径参数。我还在我的代码中尝试了字符串格式化程序 %S
    • 是的,您的路径是 python 代码中的字符串,但不是密码查询!你应该有类似的东西CALL apoc.load.csv("%s")
    • 谢谢它的工作。我之前用 %s 代替了 "%s"。 “%s”在这里工作:)
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多