Skip to main content
 首页 » 编程设计

python之py2neo 缓存在烧我吗

2025年05月04日28arxive

我正在运行这段代码:

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

编辑 - 更多信息 - 我从 ipython 中运行了上面的内容。

请您参考如下方法:

有趣的是,py2neo 在您返回节点时“记住”该节点:

MATCH (n:Node) RETURN n 

但是当您返回单个属性时,它们将始终更新:

MATCH (n:Node) RETURN n.value 

对于您的查询,这意味着当您在 while 循环中两次返回同一节点时,您必须运行 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 不返回更新的节点数据。