使用Python操作Neo4j
一、基础环境准备
1.1 创建 Conda 虚拟环境
- 打开终端/命令行,输入:
1 | conda create -n neo4j_env python=3.11 -y |
-n neo4j_env:环境名称(可自定义,如 my_neo4j_env)。
python=3.11.0:指定 Python 版本(本次采用3.11.0)。
-y:自动确认安装依赖。
- 激活环境
1 | conda activate neo4j_env # Windows/macOS/Linux 通用命令 |
1.2 安装 Py2neo 库
安装最新py2neo版本的命令:
1 | # 或安装最新版(适合 Neo4j 5.x) |
1.3 验证安装
在 Python 交互环境中测试:
1 | from py2neo import __version__ |
可以看到,已经成功连接neo4j数据库。
二、neo4j的基础语法
2.1 创建节点与关系
2.1.1 创建节点
创建一个Person的节点,名字是Alice。相当于Alice被划分为Person这个类别。
对于Person节点,有name和age两个属性。
1 | from py2neo import Graph, Node |
在neo4j内,每一个点称作一个实体(节点),Alice就是一个实体,拥有age和name两个属性。
2.1.2 创建关系
在此之前,我们先清空neo4j内的所有数据,使用以下CQL语句:
1 | MATCH (n) |
清除之后,数据库内再无任何实体。
然后,我们开始创建Alice与Bob的关系,设定他们是朋友关系,指向关系为:alice->bob;since表示朋友关系的开始时间。
创建代码如下:
1 | from py2neo import Graph, Node, NodeMatcher,Relationship |
2.1.3 注意事项
重复执行创建关系,并不会覆盖,而是会新建节点与关系。
我们再次执行2.1.2的代码,可以看到Alice和Bob再次形成新的实体,且id是不一样的。
2.2 merge的使用
2.2.1 注意事项graph.create()的缺点
在通过graph.create()进行节点、关系创建时,多次执行后,我们会重复创建相同的节点与关系。
实际上,多数情况下,这并不是我们想要的结果,我们想要的是即使多次执行,仍然只创建一组实体。
对于此,我们可以采用merge函数来解决这个问题。
2.2.2 merge的效果
- 存在则匹配:若指定模式已存在,则直接匹配并返回结果。
- 不存在则创建:若模式不存在,则创建该模式的所有元素(节点、关系及属性)。
在py2neo中,merge 会检查实体的 is_bound 状态(是否已绑定到数据库)。若实体未绑定(即未预先提交),则会自动创建并绑定实体,再创建关系。
简单来说,若实体存在,就不再次创建实体,直接创建关系;如果不存在,就先创建实体再创建关系。
2.2.3 merge的python代码
1 | from py2neo import Graph, Node, NodeMatcher,Relationship |
即使我们多次执行此代码,也仅形成一个实体关系对。
2.3 实体的查询
2.3.1 查询节点
通过NodeMatcher去匹配节点。
1 | from py2neo import Graph, Node, NodeMatcher,Relationship,RelationshipMatcher |
2.3.2 查询关系
通过RelationshipMatcher去匹配关系。
1 | from py2neo import Graph, Node, NodeMatcher,Relationship,RelationshipMatcher |
2.4 删除实体与关系
2.4.1 删除实体
通过graph.delete()删除指定实体,当实体被删除后,其关系将自动被删除。
本质:匹配到指定节点,然后用delete删除。
1 | from py2neo import Graph, Node, NodeMatcher,Relationship |
在删除Alice实体后,Alice实体的关系也被删除,仅保留Bob实体。
2.4.2 删除关系
通过graph.delete()删除指定关系,实体会被保留。
本质:匹配到指定关系,然后用delete删除。
1 | from py2neo import Graph, Node, NodeMatcher,Relationship,RelationshipMatcher |
可以看到,实体间关系被删除,但是实体得以保留。
2.4.3 删除所有数据
graph.delete_all()可以删除数据库内所有数据,一定要慎用。

















