neo4j官方Python驱动程序的最新版本建议使用transaction functions,如下所示:
class Something:
...
def add_person(self, name):
with self._driver.session() as session:
session.write_transaction(self.create_person_node, name)
@staticmethod
def create_person_node(tx, name):
tx.run("CREATE (a:Person {name: $name})", name=name)
在所有示例中,事务函数都是静态的。这有必要吗?他们也可以访问self
吗?
class Something:
...
def add_person(self, name):
with self._driver.session() as session:
session.write_transaction(self.create_person_node, name)
def create_person_node(self, tx, name):
tx.run("CREATE (a:Person {name: $name})", name=self.name)
此外,交易功能优于session.run()
的优势是什么?
答案 0 :(得分:0)
否,事务功能不必是静态的,它们可以引用self。刚刚通过使用非静态事务功能将我的一些沙箱代码扔到一个类中进行了测试,它的工作原理相同。
write_transaction
添加了自动重试机制来处理某些错误。 documentation for transaction functions的示例代码正下方的段落中对此进行了提及:
中有更详细的文档事务功能还能够使用自动重试机制来处理连接问题和瞬时错误。可以在驱动程序构造中配置此重试功能。
交易功能是最强大的交易形式,提供访问模式覆盖和重试功能。这些允许将表示事务性工作单元的功能对象作为参数传递。在可配置的时间限制内,此功能被调用一次或多次,直到成功。结果应在函数中完全使用,并且仅应返回汇总或状态值。返回活动结果对象将阻止驱动程序正确管理连接,并且会破坏重试保证。