我使用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
欢迎任何有关此问题或疑难解答的想法。
答案 0 :(得分:1)
我实际上找到了问题的根本原因。
我使用了两次会议:
Session1在那里创建节点(上面没有显示语句) Session2是找到路径的长度(如上所示)
在创建和路径查询之间添加最小延迟(time.sleep(0.1)解决了问题。
我怀疑在创建节点时尚未执行session2。
答案 1 :(得分:0)
尝试运行:
result = session.run(stmt, dict).peek()[0]
当我得到" session.run()"的返回时,我使用方法peek()(如果返回只是一行)。否则,它最好在循环中使用结果,因为这会返回一个帮助代码性能的集合对象,如果结果很大并且将所有这些转换为列表,也许你会用这个来破解你的记忆