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
方法专为包含 CREATE、MERGE 或 SET 的写入查询而设计在密码中。尝试使用:
session = driver.session()
db_result = session.run(get_all_foo_tx)
// Just dont forget to close the session
session.close()
希望这会有所帮助。
我正在使用 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
方法专为包含 CREATE、MERGE 或 SET 的写入查询而设计在密码中。尝试使用:
session = driver.session()
db_result = session.run(get_all_foo_tx)
// Just dont forget to close the session
session.close()
希望这会有所帮助。