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
,会发生什么情况?