Python py2neo正在烧死我吗?

Python py2neo正在烧死我吗?,python,neo4j,cypher,py2neo,Python,Neo4j,Cypher,Py2neo,我正在运行以下代码: 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

我正在运行以下代码:

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
而言,只有
-
所有的
都在更改。查询没有改变。我想知道py2neo是否注意到了这一点,并且没有执行查询,而是返回了一个缓存副本?如果是这样,我如何阻止这种情况发生


编辑-更多信息-我在ipython中运行了上述内容。

当您说节点的属性时是什么意思?你是说财产吗?或者是否也添加/删除了关系


您希望在
r
中得到什么?从查询中判断,除非您提到的守护进程正在向节点添加/删除
:XX
标签,否则它将始终返回完全相同的节点。

您所说的节点属性是什么意思?你是说财产吗?或者是否也添加/删除了关系


您希望在
r
中得到什么?从查询判断,除非您提到的守护进程正在向节点添加/删除
:XX
标签,否则它将始终返回完全相同的节点。

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

MATCH (n:Node) RETURN n
但当您返回单个属性时,它们将始终更新:

MATCH (n:Node) RETURN n.value
对于您的查询,这意味着您必须在
while
循环中两次返回同一节点时运行
my\u 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)
下面是一个描述行为的最小示例:


我不太清楚为什么py2neo在运行新查询时不返回更新的节点数据。

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

MATCH (n:Node) RETURN n
但当您返回单个属性时,它们将始终更新:

MATCH (n:Node) RETURN n.value
对于您的查询,这意味着您必须在
while
循环中两次返回同一节点时运行
my\u 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)
下面是一个描述行为的最小示例:


我不太清楚为什么py2neo在运行新查询时不返回更新的节点数据。

Properties,是的。守护进程非常频繁地更新属性。我可以使用neo4j控制台查看节点,看到值在变化。从我上面的小程序,一点也不。XX是一个单身汉,所以我确信只有一个。属性,是的。守护进程非常频繁地更新属性。我可以使用neo4j控制台查看节点,看到值在变化。从我上面的小程序,一点也不。XX是一个单身汉,所以我确信只有一个。在
exec\u cypher
中发生了什么?为什么
回滚()
?@MartinPreusse啊,很抱歉。exec_cyper(sic)是我们编写的一个例程,在本例中不会影响查询。我将替换它。@MartinPreusse我可能不需要这里的
begin()
rollback()
。我从来没有后悔过使用
rollback()
,即使显然不必要。
cypher.execute()
有自己的事务,所以
tx
被启动,但在
rollback()
之前从未使用过。无论如何,这对你的问题没有帮助。我尝试了一个最小的例子:。对我有用。你确定要更新吗?如果只查询
MATCH(r)RETURN r
,会发生什么?在
exec\u cypher
中会发生什么?为什么
回滚()
?@MartinPreusse啊,很抱歉。exec_cyper(sic)是我们编写的一个例程,在本例中不会影响查询。我将替换它。@MartinPreusse我可能不需要这里的
begin()
rollback()
。我从来没有后悔过使用
rollback()
,即使显然不必要。
cypher.execute()
有自己的事务,所以
tx
被启动,但在
rollback()
之前从未使用过。无论如何,这对你的问题没有帮助。我尝试了一个最小的例子:。对我有用。你确定要更新吗?如果只查询
匹配(r)返回r
,会发生什么情况?