2013-05-12 24 views
0

所有,与Neo4j的开始,它的RESTClient实现,并试图发送一个暗号查询,删除所有节点:NEO4JRESTCLIENT - 删除所有节点/ rels查询问题?

gdb = GraphDatabase("http://localhost:7474/db/data/") 
query1 = """START n=node(*) 
MATCH n-[r?]-() 
WHERE ID(n) <> 0 
DELETE n,r""" 
gdb.query(q=query1) 

query2 = """start r=node(*) return count(r)""" 
print gdb.query(q=query2)[0] 

使用第二个查询计算节点指示第一个查询没有运行(正常至少) 。请注意,query1在neo4j数据浏览器中工作正常。

这里的任何想法?

回答

1

您的第一个查询语句只生成一个QuerySequence对象。除非你需要结果,例如通过尝试访问结果,或通过调用get_response,不执行任何操作。

你可以看到每一个节点实际删除:

query1 = """START n=node(*) 
     MATCH n-[r?]-() 
     WHERE ID(n) <> 0 
     DELETE n,r 
     RETURN COUNT(n)""" 

print gdb.query(query1).get_response() 
# something like {u'columns': [u'COUNT(n)'], u'data': [[3]]} 
+0

这是有道理的;我想知道为什么query2(计数节点)工作,而不需要发出.get_response()?是否因为返回嵌入在Cypher查询中以开始? – 2013-05-12 15:59:07

+0

否,但是当您打印第一个元素时隐式要求响应 – 2013-05-12 16:11:33

+0

自'neo4jrestclient' 2.0.0开始,添加了一个新参数lazy,以便在需要时强制执行查询:'print gdb.query(query1,lazy = False)' – 2014-02-20 00:08:44