我正在运行这段代码:
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 不返回更新的节点数据。
