【问题标题】:How to use dictionary parameters in Python Neo4J如何在 Python Neo4J 中使用字典参数
【发布时间】:2020-08-30 15:58:43
【问题描述】:

我正在使用py2neo 在 Python 中运行 Cypher 查询。目前,我正在传递$user_id$name 的值。

query = "MATCH (user:User{id:$user_id, name: $name}) MATCH (user)-[rout]->() WITH user, collect(DISTINCT {relationship: type(rout), node: endNode(rout)}) AS extended_info RETURN { user: user, extended_info: extended_info } AS result"

graph.run(query, parameters= {"user_id": 1, "name": "Vivek"}).data()

我想传递键和值的字典,而不仅仅是传递值。像这样的:

{id:1, name: "Vivek"}

并直接在查询中使用。这将使我能够灵活地编写单个查询来过滤一个或多个属性。

query = "MATCH (user:User{$params}) MATCH (user)-[rout]->() WITH user, collect(DISTINCT {relationship: type(rout), node: endNode(rout)}) AS extended_info RETURN { user: user, extended_info: extended_info } AS result"

graph.run(query, parameters= {id:1, name: "Vivek"}).data()

有没有办法使用py2neo 做到这一点?或者有没有其他方法可以为匹配查询编写单个查询?

【问题讨论】:

    标签: python neo4j py2neo


    【解决方案1】:

    如果可以,一种解决方案是使用字符串格式动态构建查询:

    1. 首先尝试使用属性创建查询。

      query = "MATCH (u:User {{ {properties} }}) RETURN u.name"
      

      {properties} 将被字符串格式替换,而{{ ... }} 将在字符串格式期间转换为单括号{..}

    2. 定义你的参数:警告记住,在python中,字典键必须是字符串(嗯,不仅如此,但在这种情况下是的)

      parameters = {"id": 1, "name": "Toto"}
      
    3. 为 py2neo 创建属性列表:

      properties = ', '.join('{0}: ${0}'.format(n) for n in parameters)
      
    4. 格式化您的查询:

      query2 = query.format(properties=properties)
      print(query2)
      

      query2 现在看起来像这样:

      MATCH (u:User { id: $id, name: $name }) RETURN u.name
      
    5. 最后,你可以带参数运行query2

      r = graph.run(query2, parameters=parameters)
      print(r.data())
      

    请注意,我们可以完全格式化字符串以在那里注入参数,但我更喜欢让 py2neo 在那里执行必要的检查。

    【讨论】:

    • 感谢您的解决方案。它非常适合我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多