如何将变量添加到 python 内的 neo4j 密码代码中

how to add variables into neo4j cypher code inside python

我试图在我的 python 函数的密码代码中获取一个函数参数。该函数接受 3 个参数,并在人与人之间添加给定类型的关系,如下所示(该函数基于 https://neo4j.com/docs/python-manual/current/get-started/ 中的示例):

def create_and_return_relationship(tx, person1_tid, person2_tid, rel_type):
        query = (
            "MATCH (p1:Person {tid: $person1_tid})"
            "MATCH (p2:Person {tid: $person2_tid})"
            "MERGE (p2)-[r: {REL: $rel_type}]->(p1)"
            "RETURN type(r)"
        )
        result = tx.run(query, person1_tid=person1_tid, person2_tid=person2_tid, rel_type=rel_type)
        try:
            return [{"p1": record["p1"]["name"], "p2": record["p2"]["name"]}
                    for record in result]

但是当我 运行 脚本时出现以下语法错误。

neo4j.exceptions.CypherSyntaxError: {code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input '{': expected an identifier (line 1, column 90 (offset: 89))
"MATCH (p1:Person {tid: $person1_tid})MATCH (p2:Person {tid: $person2_tid})MERGE (p2)-[r: {REL: $rel_type}]->(p1)RETURN type(r)"
                                                                                          ^}

是否可以在密码查询的关系部分使用变量?

您不能在 Neo4j Cypher 中为关系类型使用变量。您需要进行字符串连接或使用 apoc 来合并动态关系类型:

在您的示例中,您将使用:

MATCH (p1:Person {tid: $person1_tid})
MATCH (p2:Person {tid: $person2_tid})
CALL apoc.merge.relationship(p1, $rel_type,{}, {},p2, {})
YIELD rel
RETURN rel;

文档中的更多信息: https://neo4j.com/labs/apoc/4.1/overview/apoc.merge/apoc.merge.relationship/