Python Neo4j 驱动程序 write_transaction 返回空结果

Python Neo4j Driver write_transaction returning empty result

我正在使用 Neo4j 版本 4.0.1,python 驱动程序版本 4.0 在 python 3.7.2

我的问题是,在一个事务中,数据库的结果包含记录,而如果返回到事务外则没有。在我看来,对于正常的 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 是分开的;乍一看这令人困惑。

也许您的问题是您正在使用 session.write_transaction,但您只想从 Neo4j 读取数据。 write_transaction 方法专为包含 CREATEMERGESET 的写入查询而设计在密码中。尝试使用:

session = driver.session()
db_result = session.run(get_all_foo_tx)
// Just dont forget to close the session
session.close()

希望这会有所帮助。