py2neo匹配Person节点报SyntaxError: Invalid input '{'错误如何解决
错误原因
该报错本质是py2neo与Neo4j的版本不兼容:
- 4.x及更早的py2neo版本生成参数化Cypher时,使用旧式
{数字序号}格式的参数占位符,即报错中出现的{1}。 - Neo4j 4.0及以上版本已经废弃该占位符语法,仅支持
$参数名格式的参数写法,因此解析到{字符时直接触发语法错误。
修复方法
两种方案按需选择:
- 无依赖限制时优先升级py2neo:执行命令
pip install --upgrade py2neo,升级到适配高版本Neo4j的稳定版本即可。原有graph.nodes.match()的业务代码不需要任何修改,新版本py2neo会自动生成符合语法规范的$格式参数占位符,直接运行即可。如果升级过程中出现依赖冲突,可先清理冲突包再重装:pip uninstall -y py2neo neo4j && pip install py2neo - 若项目依赖锁定无法升级py2neo,可绕过
nodes.match()封装API,手写符合Cypher语法的查询语句,显式使用$格式传递参数,参考代码如下:
nameu = 'person_%d'%(rel[0]) namev = 'person_%d'%(rel[1]) nodeu = graph.run("MATCH (n:Person) WHERE n.name = $name RETURN n LIMIT 1", name=nameu).evaluate() nodev = graph.run("MATCH (n:Person) WHERE n.name = $name RETURN n LIMIT 1", name=namev).evaluate()
代码中evaluate()方法会返回查询结果第一行的第一列值,和原代码中first()取首个匹配节点的效果完全一致。
内容的提问来源于stack exchange,提问作者user19553168
相关产品推荐
相关产品推荐

