neo4j BOLT查询并不总是能够正常工作

时间:2016-06-28 06:53:27

标签: python neo4j cypher

我使用BOLT for NEO4j,我有一个简单的查询来查找任意长度的节点(开始和停止)之间的长度

stmt = MATCH (n:Month {ID: {start} }),(m:Month {ID: {stop}}),p = shortestPath((n)-[r:nextMonth*..100000]-(m)) RETURN LENGTH(p)
dict = {'start': '201507', 'stop': '201509'}
result = list(session.run(stmt, dict))[0][0]

当我使用Web界面时,Cypher查询会返回2的结果(这是正确的结果)。当我运行python命令时,大多数时候结果都是[](即没有值)而不是值2.有时它运行正常,有时却没有。让我感到困惑的是,它并没有始终提供正确的值,而且我可以手动运行查询而没有任何问题。

这只是一个较大的代码文件的摘录。我想知道会话是如何建立或关闭的?我使用的会话具有正确的类型:neo4j.v1.session.Session对象位于0x04CCD7F0

欢迎任何有关此问题或疑难解答的想法。

2 个答案:

答案 0 :(得分:1)

我实际上找到了问题的根本原因。

我使用了两次会议:

Session1在那里创建节点(上面没有显示语句) Session2是找到路径的长度(如上所示)

在创建和路径查询之间添加最小延迟(time.sleep(0.1)解决了问题。

我怀疑在创建节点时尚未执行session2。

答案 1 :(得分:0)

尝试运行:

result = session.run(stmt, dict).peek()[0]

当我得到" session.run()"的返回时,我使用方法peek()(如果返回只是一行)。否则,它最好在循环中使用结果,因为这会返回一个帮助代码性能的集合对象,如果结果很大并且将所有这些转换为列表,也许你会用这个来破解你的记忆