如何在 Python Neo4J 中使用字典参数
How to use dictionary parameters in Python Neo4J
我正在使用 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
来做到这一点?或者有没有其他方法可以为匹配查询编写单个查询?
如果可以,一种解决方案是使用字符串格式动态构建查询:
首先尝试创建一个带有属性的查询。
query = "MATCH (u:User {{ {properties} }}) RETURN u.name"
{properties}
会被字符串格式化替换,而{{ ... }}
在字符串格式化时会被转换成单括号{..}
。
定义你的参数:警告记住在python中,字典键必须是字符串(好吧,不仅如此,但在这种情况下是)
parameters = {"id": 1, "name": "Toto"}
为 py2neo 创建属性列表:
properties = ', '.join('{0}: [=12=]'.format(n) for n in parameters)
格式化您的查询:
query2 = query.format(properties=properties)
print(query2)
query2
现在看起来像这样:
MATCH (u:User { id: $id, name: $name }) RETURN u.name
最后可以运行query2
带参数:
r = graph.run(query2, parameters=parameters)
print(r.data())
请注意,我们可以完全格式化字符串以在那里注入参数,但我更愿意让 py2neo 在那里执行必要的检查。
我正在使用 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
来做到这一点?或者有没有其他方法可以为匹配查询编写单个查询?
如果可以,一种解决方案是使用字符串格式动态构建查询:
首先尝试创建一个带有属性的查询。
query = "MATCH (u:User {{ {properties} }}) RETURN u.name"
{properties}
会被字符串格式化替换,而{{ ... }}
在字符串格式化时会被转换成单括号{..}
。定义你的参数:警告记住在python中,字典键必须是字符串(好吧,不仅如此,但在这种情况下是)
parameters = {"id": 1, "name": "Toto"}
为 py2neo 创建属性列表:
properties = ', '.join('{0}: [=12=]'.format(n) for n in parameters)
格式化您的查询:
query2 = query.format(properties=properties) print(query2)
query2
现在看起来像这样:MATCH (u:User { id: $id, name: $name }) RETURN u.name
最后可以运行
query2
带参数:r = graph.run(query2, parameters=parameters) print(r.data())
请注意,我们可以完全格式化字符串以在那里注入参数,但我更愿意让 py2neo 在那里执行必要的检查。