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

时间:2020-07-02 09:16:30

标签: python-3.x neo4j bolt

我正在使用Neo4j版本4.0.1,以及python 3.7.2上的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分开;一见钟情。

1 个答案:

答案 0 :(得分:0)

也许您的问题是您正在使用session.write_transaction,但是您只想从Neo4j中读取数据。 write_transaction方法用于写查询,其中您在密码中包含 CREATE MERGE SET 。尝试使用:

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

希望这会有所帮助。

相关问题