如何解决这个neo4j/python错误,我的查询在neo4j UI中运行正常,但在这里出现这个错误

j7dteeu8  于 2022-11-05  发布在  Python
关注(0)|答案(1)|浏览(230)

这是我尝试运行的代码

def get_label(tx, name): 
tx.run("Match(n) where n.name=$name" 
     "return labels(n)",
      name=name )
return "labels(n)"

with graphdb.session() as session:
    Label = session.read_transaction(get_label, "usa")

我遇到此语法错误:
neo4j.exceptions.CypherSyntaxError:{代码:Neo.客户端错误.语句.语法错误} {消息:无效的输入'a':应为“o/O”(第1行,第36列(偏移量:35))“匹配(n),其中n.name =$名称返回标签(n)”^}

s4n0splo

s4n0splo1#

首先,您的查询中在$namereturn之间缺少一个空格或换行符。它应该是:

"MATCH (n) WHERE n.name = $name RETURN labels(n)"

或者甚至更短:

"MATCH (n {name: $name}) RETURN labels(n)"

第二,你返回的不是tx.run的结果,而是一个字符串。我对Python没有经验,但代码应该更像这样:

def get_label(tx, name): 
    return list(tx.run("MATCH (n {name: $name}) RETURN labels(n)", name=name))

最后,get_label可能是一个用词不当。一个节点定义了0到许多标签,我在这里建议的实现将返回与匹配节点一样多的标签列表。如果名称在数据集中的所有节点中是唯一的,这可能意味着一个列表。

相关问题