py2neo V3中V2版本merge_one、create_unique、find_one的等效实现方法
py2neo V2 升级V3 常用API适配说明
py2neo V3对节点、关系操作类API做了统一重构,V2版本中三个已下线方法的等效实现可完全覆盖原有业务逻辑,具体适配方式如下:
graph.merge_one 等效实现
- 原功能:根据节点标签、指定属性匹配或创建单个节点,适配唯一约束场景,多匹配时不抛出异常
- V3统一调用方法:
graph.merge(subject, label, *property_keys),逻辑与原方法完全对齐 - 适配代码(对齐原示例):
from py2neo import Node, Graph # 初始化图连接 graph = Graph("neo4j数据库连接地址") nicole = Node("Person", name="Nicole", age=24) # 指定按"name"属性匹配Person标签节点,存在则绑定到nicole对象,不存在则创建 graph.merge(nicole, "Person", "name")
graph.create_unique 等效实现
- 原功能:在单个事务中基于Cypher唯一创建语义生成关系,仅创建不存在的关系,避免重复
- V3统一调用方法:直接对关系对象执行
graph.merge(relationship),自动校验关系起点、终点、关系类型,行为与原方法完全一致 - 适配代码(对齐原示例):
from py2neo import Node, Relationship, Graph graph = Graph("neo4j数据库连接地址") kenny = Node("Person", name="Kenny") graph.create(kenny) kingfish = Node("Bar", name="Kingfish") graph.create(kingfish) rel = Relationship(kenny, "LIKES", kingfish) # 仅当(kenny)-[:LIKES]->(kingfish)关系不存在时执行创建 graph.merge(rel)
graph.find_one 等效实现
- 原功能:根据节点标签、指定属性查找单个节点,多匹配时取第一条结果不抛异常,无匹配时返回None
- V3统一调用方法:通过
graph.nodes.match()查询链搭配.first()方法实现 - 适配代码(对齐原示例):
from py2neo import Graph graph = Graph("neo4j数据库连接地址") # 匹配Person标签、name属性为Kenny的节点,多匹配时取第一条,无结果返回None kenny = graph.nodes.match("Person", name="Kenny").first()
通用注意:执行节点合并、关系合并操作前,需提前在Neo4j中为对应标签的匹配属性创建唯一约束,否则会出现全表扫描性能损耗、重复节点创建的问题,这一操作要求与V2版本完全一致。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

