如何在Neo4j查询中传入Python列表参数并解决语法报错问题
错误原因
你当前触发的SyntaxError是Python层面的语法错误,你将Cypher查询字符串和查询参数直接放在同一个括号内赋值给query变量,不符合Python语法规则,也不符合Neo4j Python驱动的传参规范。
正确实现方案
- 第一步:单独定义Cypher查询语句,保留
$name作为参数占位符
cypher_query = """ MATCH (p1:Item),(p2:Item) WHERE p1.value = $name RETURN p1.value AS from, p2.value AS to, gds.alpha.similarity.euclideanDistance(p1.embeddingNode2vec, p2.embeddingNode2vec) AS similarity ORDER BY similarity DESC LIMIT 40 """
- 第二步:定义查询参数字典,按照你的需求取references列表的第一个元素作为参数值
query_params = { "name": references[0] }
- 第三步:调用Neo4j驱动执行接口时传入查询语句和参数
# 已提前初始化Neo4j驱动对象driver的前提下,执行查询示例 with driver.session() as session: result = session.run(cypher_query, parameters=query_params) # 后续按需遍历result处理返回结果即可
补充说明
- 你原有代码中使用
references[2]取的是列表第三个元素,列表索引从0开始,取第一个元素需要用references[0] - Cypher语句中
p1.embeddingNode2vec外的多余括号可直接删除,不影响逻辑的同时代码更简洁
内容的提问来源于stack exchange,提问作者user12678036
相关产品推荐
相关产品推荐

