我在 python 3.7.2 上使用 Neo4j 版本 4.0.1,python 驱动程序版本 4.0
我的问题是,在事务中,来自数据库的结果包含记录,而如果返回到事务外部则不包含记录。在我看来,对于普通的 MATCH() 查询,如果不介意发生丢失更新的可能性,那么发出查询并在事务外使用它应该不是问题。
以下代码生成了一个最小示例。
driver = GraphDatabase.driver(uri, auth=(user, password), encrypted=False)
def get_all_foo_tx(tx):
result = tx.run("MATCH(n:Foo) RETURN n.id")
# result can be iterated over here
# for record in result:
# print(record)
return result
def get_all_foo():
session = driver.session()
db_result = session.write_transaction(get_all_foo_tx)
# result is empty here
# for record in result:
# print(record)
我现在的问题是:这是预期的行为吗?
使用之前的 Neo4j 驱动程序版本,上面概述的代码可以正常工作,而最新的驱动程序版本则不能。我查看了文档的“重大更改”部分,对我来说没有什么可以解释行为的变化。
在事务之外消费结果是“坏习惯”吗?
注意:我实际执行的代码比这复杂得多,这是一个最小的例子。该行为在一系列查询中是一致的,其中结果包含多条记录。我有一个名为 id 的属性,它与内部 Neo4j id 是分开的;乍一看,这令人困惑。