Python Neo4J/py2neo——基于游标的查询?

Python Neo4J/py2neo——基于游标的查询?,python,neo4j,py2neo,Python,Neo4j,Py2neo,如果我这样做: from py2neo import Graph graph = Graph() stuff = graph.cypher.execute(""" match (a:Article)-[p]-n return a, n, p.weight """) 在一个包含大量文章和链接的数据库上,查询需要很长时间,并且使用了我系统的所有内存,大概是因为它一次就将整个结果集复制到内存中。是否有一种基于游标的版本,我可以一次遍历一个结果,而不必一次将它们全部存储在内存中 编辑 我找到了

如果我这样做:

from py2neo import Graph
graph = Graph()
stuff = graph.cypher.execute("""
    match (a:Article)-[p]-n return a, n, p.weight
""")
在一个包含大量文章和链接的数据库上,查询需要很长时间,并且使用了我系统的所有内存,大概是因为它一次就将整个结果集复制到内存中。是否有一种基于游标的版本,我可以一次遍历一个结果,而不必一次将它们全部存储在内存中

编辑

我找到了
函数:

stuff = graph.cypher.stream("""
    match (a:Article)-[p]-n return a, n, p.weight
""")

根据文档,这似乎是我想要的,但现在我得到了一个超时错误(
py2neo.packages.httpstream.http.SocketError:timed out
),随后服务器变得无响应,直到我使用
kill-9

杀死它。您尝试过实现分页机制吗?可能使用skip关键字:

类似于在postgres/mysql查询中使用limit/offset


编辑:我之前说过,整个结果集都存储在内存中,但在使用api流媒体时,情况似乎并非如此——根据奈杰尔(Neo engineer)下面的评论。

是的,我确实想到了,但我希望不必这样做;似乎是实现如此简单的东西的一种笨拙的方式。stream方法不会将整个结果放在内存中-它会增量解析返回的JSON。@NigelSmall-您是说结果集没有保存在图形数据库机器的内存中吗?很抱歉,我误解了它的工作原理……当使用
stream
方法时,结果在计算时从服务器流式传输(),在接收到调用应用程序()时从客户端上的响应流式传输()。@NigelSmall-wicked!谢谢你的澄清。我将编辑我的评论以反映事实。