如何使用py2neo优雅的进行增删改查
1.py2neo介绍
py2neo是一个客户端库和工具包,用于从Python应用程序和命令行中使用Neo4j 。该库支持Bolt和HTTP协议,并提供高级 API、OGM(Object Graph Mapping)、管理工具、交互式控制台、Cypher 词法分析器以及许多功能。
使用的py2neo版本为2021.2.3,neo4j版本为社区版4.3.7,jdk版本为openjdk11+28
2.CRUD
2.1 连接数据库
社区版Neo4j默认构建了一个名为neo4j的数据库,本篇都以默认的neo4j数据库为例。
from py2neo import Graph
# 以笔者为例 url为 http://127.0.0.1:7474, username为 neo4j, password为 neo4j
# 换成自己的就可以了
graph = Graph(url, auth=(username, password))
2.2 增加
2.2.1 无需考虑冲突
不用考虑冲突是指新增加的实体、关系或属性不会与当前存在于数据库中的内容产生联系。比如往新创建的数据库添加内容;往数据库中添加以前从未有过的内容。但为了保险起见,一般还是需要考虑冲突。
# 当不用考虑冲突时,可以采取直接添加的方式
from py2neo import Node, Relationship
# 添加 有多个属性的节点
zhao_node = Node("Person", name="zhao")
zhao_node["birthday"] = "2000.01.01"
zhao_node["height"] = "188cm"
graph.create(zhao_node)
qian_node = Node("Person", name="qian")
qian_node["birthday"] = "2001.01.01"
qian_node["height"] = "165cm"
graph.create(qian_node)
# 添加一个有多属性节点的边
zhao_qian_relation = Relationship(zhao_node, "COUPLE", qian_node)
zhao_qian_relation["married_time"] = "2022.02.02"
graph.create(zhao_qian_relation)
# 新建一条完整的实体——关系——实体简便方法:
# 参考上面的情况,不用使用create方法单独保存两个实体
# 只用 保存zhao_qian_relation这个关系,关系两侧的节点也会自动保存
2.3 查询
py2neo封装了节点、关系匹配器,不用写Cypher既可查询出结果。
from py2neo import NodeMatcher, RelationshipMatch
# 按条件查询节点
nodes = NodeMatcher(graph)
zhao_node = nodes.match("Person", name="zhao").all()
# 按条件查询关系
zhao_relation = RelationshipMatch(graph, nodes=zhao_node).first()
2.4 修改
修改需要先查到节点或关系、然后赋值。当没有查到直接赋值时,Neo4j会直接新增一个内容一样的实体或关系。
nodes = NodeMatcher(graph)
zhao_node = nodes.match("Person", name="zhao").first()
zhao_node["birthday"] = "2020.02.02"
graph.push(zhao_node)
2.5 删除
- 删除当前数据库中的所有节点、属性和关系
graph.delete_all()
- 删除指定节点、属性与关系
# 删除前面查找出来的zhao_relation, 只删除括号里的关系或节点 graph.separate(zhao_relation) # 删除前面查找出来的zhao_relation直接相关的节点与关系 graph.delete(zhao_node)