【问题标题】:Multiple variables in cypher query (name, label) - py2neo密码查询中的多个变量(名称,标签) - py2neo
【发布时间】:2015-12-18 15:19:17
【问题描述】:

现在又遇到了一个问题。我想创建一个工作的 HTML 表单,用户可以在其中输入节点的名称,并通过单选框选择标签 - 提交后它在 neo4j 中创建。

以下作品:

result = graph.cypher.execute("CREATE (n:Test { name : '%s' })" % cypher_escape(node))

所以现在我可以使用我输入的任何名称创建一个节点,但我无法让标签工作。从文档中我知道 cypher_escape 只能与 1 个参数一起使用,并且标签不能被参数化。

是否有一些解决方法/其他方法可以将变量作为标签添加到密码查询中?

提前致谢! :)

【问题讨论】:

    标签: python neo4j cypher py2neo


    【解决方案1】:

    标签无法在 Cypher 中参数化,因此您必须在客户端代码中使用字符串连接或字符串格式来构建 Cypher 查询。这样做的理由是查询计划可能因标签而异,因此无法缓存执行计划。

    但是,您应该对属性值使用查询参数。这允许查询计划缓存和再次执行查询时更好的性能:

    graph.cypher.execute("CREATE (n:Test {name: {name})", parameters={"name": "Bob"})
    

    那么就为标签使用字符串格式:

    label_string = "Test"
    query = "CREATE (n:%s {name: {name})" % label_string
    graph.cypher.execute(query, parameters={"name": "Bob"})
    

    【讨论】:

    • 您好,那么如何将变量赋值给参数呢? (在这种情况下,用变量替换硬编码的“Bob”,因为每次用户输入的值都是不同的。
    • 谢谢威廉,现在明白了 :) 使用字符串格式很容易做到。 query = "CREATE (n:%s {name: '%s'})" % (type,node)
    • 不,您不想对属性使用字符串格式。您只需要用变量替换“Bob”。 graph.cypher.execute(query, parameters={"name":node})
    • 嗨妮可,为什么?在创建具有许多属性的节点时,即使使用多个变量,它也适用于我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多