如何在py2neo中传递参数给cypher查询

4 投票
4 回答
6949 浏览
提问于 2025-04-18 14:00

我有一个变量,名字叫做 "Rahul"。我想把这个变量传递给 Py2neo 中的 cypher 查询,方法如下:

line=session.execute("MATCH (person)WHERE person.name=name RETURN person")

但是我遇到了一个错误 -

"py2neo.cypher.InvalidSyntax: name not defined (line 1, column 33)"

那么,怎样才能在 Py2neo 中传递这个变量呢?

4 个回答

0

获取节点的另一种方法是:

from py2neo import Graph, authenticate

server = "localhost:7474"

# set up authentication parameters
authenticate(server, <user>, <password>)

graph = Graph("{0}/db/data".format(server))
results = graph.find("person", "name", "Rahul")
1

为了让大家更明白,给py2neo查询传递参数的通用方法是这样的:

from py2neo import Graph

graph = Graph("URI", auth=("USER", "PASSWORD"))
graph.run("MATCH (p:Person) WHERE p.name=$name RETURN p", parameters={'name': 'Rahul'})

(注意这个$符号)

1

如果你想把你的查询放在一个事务中,可以使用 cypher 模块来创建一个会话,然后再创建一个事务对象。这样做的语法和 neo4j.CypherQuery 有点不同,后者在 stephenmuss 的回答中提到过。

from py2neo import neo4j, cypher
graph_db = neo4j.GraphDatabaseService('http://localhost:7474/db/data/')

# Create a Session
session = cypher.Session('http://localhost:7474')
# Create a transaction
tx = session.create_transaction()

# Write your query, and then include it in the transaction with a dictionary
# of parameters.
qs = 'MATCH (person) WHERE person.name = {name} RETURN person'
tx.append(qs, parameters={'name': 'Rahul'})
results = tx.commit()
7

如果name是一个参数,你需要把它放在大括号里。你的查询应该像下面这样

MATCH (person) WHERE person.name = {name} RETURN person

你的Python代码可能看起来像下面这样

graph_db = neo4j.GraphDatabaseService()
qs = 'MATCH (person) WHERE person.name = {name} RETURN person'
query = neo4j.CypherQuery(graph_db, qs)
results = query.execute(name='Rahul')
print results

撰写回答