如何将变量添加到 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/
我试图在我的 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/