【问题标题】:Adding a python list parameter in a neo4j query在 neo4j 查询中添加 python 列表参数
【发布时间】:2021-08-20 09:51:36
【问题描述】:

我即将在 neo4j 中使用参数运行查询,但它总是返回错误。

> query= ("MATCH (p1:Item),(p2:Item) where p1.value=$name
> RETURN  p1.value AS from, p2.value AS to,
> gds.alpha.similarity.euclideanDistance((p1.embeddingNode2vec),
> (p2.embeddingNode2vec)) AS similarity order by similarity desc limit
> 40", name=references[2])

p1.value 引用列表中的第一个元素。这给了我一个

SyntaxError: 无效语法

错误。你能告诉我如何运行它吗? 到目前为止我的研究:https://community.neo4j.com/t/how-to-use-dictionary-parameters-in-python-neo4j/18626

【问题讨论】:

    标签: python neo4j cypher py2neo


    【解决方案1】:
    MATCH (p1:Item),(p2:Item) where p1.value=$params RETURN  p1.value AS from, p2.value AS to, gds.alpha.similarity.euclideanDistance((p1.embeddingNode2vec), (p2.embeddingNode2vec)) AS similarity order by similarity desc limit 40
    

    然后像这样调用查询执行:

    nodes = graphDB_Session.run(query, params= references[1])
    

    【讨论】:

      【解决方案2】:

      最好查看代码的更多详细信息,但看起来问题出在括号上。 通常,当我在 python 中进行多行查询时,我会使用多行 f 字符串(使用三引号 -> """)

      所以代码看起来像:

      query= f"""MATCH (p1:Item),(p2:Item) where p1.value={references[2]}
      RETURN  p1.value AS from, p2.value AS to,
      gds.alpha.similarity.euclideanDistance((p1.embeddingNode2vec),
      (p2.embeddingNode2vec)) AS similarity order by similarity desc limit
      40"""
      

      obs:也许您必须为参数 ('{references[2]') 插入单引号,以便 Neo4J 将其识别为字符串而不是变量。

      这样你就不需要在 session.run 方法中传递参数了。 请注意并记住正确转义代码中的任何花括号(只需复制它 { -> {{ )

      如果您不想使用 f 字符串,请删除括号,保留美元符号语法 ($name) 而不是花括号,并将参数直接传递到 client.run() .

      像这样:

      run = client.run(query, name=references[2])
      

      【讨论】:

      • 只是为了添加一些东西,我更喜欢 f-string 方式,因为我已经注意到在创建子图时使用美元语法的一些错误。我仍然不明白发生了什么,但 f-string 方式是唯一可行的方式。
      猜你喜欢
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2018-07-29
      相关资源
      最近更新 更多