py2neo 缓存在烧我吗?

Is py2neo caching burning me?

我正在运行宁此代码:

c = """
    match(r:XX)
    optional match(r)-[]-(m) with count(m) as mc, r match(x)
    return count(x) as all, r, mc
    """
        (snip!)
        while(True):
            tx = remote_graph.cypher.begin()
            res = remote_graph.cypher.execute(c)
            tx.rollback()
            time.sleep(15)
        (snip!)

我知道 XX 节点的属性每秒都在变化 - 有一个守护进程 运行ning。但是,当我 运行 这个时,我总是在 res 中得到相同的值,但是对于 r 只有 - all 正在改变.查询没有改变。我想知道 py2neo 是否注意到了这一点并且没有执行查询,而是返回给我一个缓存的副本?如果是这样,我该如何阻止这种情况发生?

编辑 - 更多信息 - 我 运行 以上来自 ipython.

你说节点的属性是什么意思?你是说属性吗?或者关系 added/removed 也是?

您希望在 r 得到什么?从查询来看,除非你提到的守护进程是 adding/removing :XX 标签 to/from 节点,否则它总是 return 完全相同的节点。

有趣的是,py2neo 'remembers' 当你 return 节点时的节点:

MATCH (n:Node) RETURN n

但是当您 return 个别属性时,它们将始终更新:

MATCH (n:Node) RETURN n.value

对于您的查询,这意味着当您在 while 循环中 return 同一节点两次时,您必须 运行 my_node.pull()

while True:
    q = "MATCH (n:Node) RETURN n"
    result = graph.cypher.execute(q)
    my_node = result[0][0]
    my_node.pull()
    print(my_node)

您还可以将 pull() 以外的所有内容移出循环:

q = "MATCH (n:Node) RETURN n"
result = graph.cypher.execute(q)
my_node = result[0][0]

while True:
    my_node.pull()
    print(my_node)

这是一个描述行为的最小示例:http://paste.ubuntu.com/14015568/

我不太确定为什么在您 运行 新查询时 py2neo 不 return 更新节点数据。