2015-10-21 40 views
1

我正在使用py2neo来将python连接到neo4j数据库。然后我试图执行一个查询来为某些节点设置一个标签名称,但标签名称是一个参数。这是我的代码我正在使用py2neo来连接python到neo4j数据库

for nodeID in nodesIDs: 
    nodes=nodesIDs[nodeID] 
    r=graph.cypher.execute("MATCH (d:node00) WHERE d.name in{x} SET d:{ID} RETURN d.name",{"x":nodes,"ID":nodeID}) 
    print len(r) 

但是这给我一个错误说"Invalid input '(': expected whitespace or a label name"

请指教

回答

1

白色空间是Cypher支架查询显著。确保你的查询实际在Neo4j shell中运行,然后把它扔到Python包装器中。

0

让我们看看您正在执行的查询:

MATCH (d:node00) 
WHERE d.name IN {x} 
SET d:{ID} 
RETURN d.name 

其中参数x大概是字符串数组,参数ID是一个字符串。

这里有几点考虑:

  1. 节点标签不能在Cypher支架查询进行参数设置。因此条款SET d:{ID}将不起作用。相反,在Python脚本中使用字符串连接来将标签作为字符串查询的一部分,而不是作为参数:"...SET d:" + str(newLabel) + ...
  2. 确保参数x实际上是一个字符串数组,并确保在子句中有适当的间距WHERE d.name IN {x}IN{x}之间的空格)
  3. 最后,您可能想重新考虑如何使用标签。它看起来像是将标签视为标识单个节点的标识。应使用标签来标识节点的类型或“类别”,例如“人员”或“事件”等。