neo4j是使用最广泛的中小型图数据库,提供了图形操作界面和cypher查询语言。

这里尝试基于docker构建neo4j环境,并使用python进行图数据库的基本操作。

示例代码参考和修改自网络资料。

1 neo4j安装

1.1 neo4j安装

为简化操作这里采用docker安装neo4j,并假设docker已经安装,安装过程参考如下链接。

https://blog.csdn.net/liliang199/article/details/150067330

neo4j docker安装指令如下。

docker pull docker pull neo4j:2025.09

启动docker neo4j容器

设置登录用户名(neo4j)和密码(12345678) --env NEO4J_AUTH=neo4j/123456

设置neo4j数据目录--volume=/data/dockerData/neo4j/data:/data

docker run -d     --name neo4j     --restart always     --publish=7474:7474 --publish=7687:7687     --env NEO4J_AUTH=neo4j/12345678     --volume=/data/dockerData/neo4j/data:/data     neo4j:2025.09     sleep 999999999999999

1.2 neo4j启动

由于一些原因,docker启动neo4j容器后,容器中neo4j可能没有启动,需登录容器手工处理。

登录docker容器

docker exec -it neo4j bash

修改登录密码

cd bin; neo4j-admin dbms set-initial-password "12345678"

启动neo4j

cd ..; ./bin/neo4j start

此时,neo4j成功启动,就可以使用浏览器登录和测试neo4j了。

http://127.0.0.1:7474/browser/

2 python连接

2.1 环境构建

这里使用conda构建python环境,并安装py2neo包,脚本如下所示。

conda create -n langchain python=3.10

conda activate langchain

conda install cmake

conda install ninja

pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simpl

2.2 neo4j连接

以下是使用py2neo连接neo4j的代码示例。

参考上述安装过程,用户名和密码分别为neo4j和12345678。

from py2neo import Graph, Subgraph
from py2neo import Node, Relationship, Path

# 连接数据库
graph = Graph('bolt://localhost:7687', auth=('neo4j', '12345678'))

2.3 创建节点和关系

以下示例节点和关联创建过程。

from py2neo import Node, Relationship

# 创建节点
zs= Node("Person", name="张三")
ls = Node("Person", name="李四")

# 创建关系
knows = Relationship(zs, "knows", ls)

# 将节点和关系写入数据库
graph.create(zs | ls | knows)

2.4 cypher查询

以下示例cypher查询,以及对应的运行和查看方法。

run(query)执行任意query表示的Cypher 查询

data()将查询结果以字典形式返回

# 查询所有 Person 节点
results = graph.run("MATCH (p:Person) RETURN p.name").data()

for result in results:
    print(result["p.name"])

2.5 match查询

match(label, **属性)匹配标签和属性
first()返回第一个匹配项

from py2neo import NodeMatcher

matcher = NodeMatcher(graph)
# 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.match("Person", name="张三").first()
print(zs)

2.6 更新节点属性

matcher = NodeMatcher(graph)
# 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.match("Person", name="张三").first()
zs["age"] = 30
graph.push(zs)  # 将更改推送到数据库

2.7 删除节点和关系

matcher = NodeMatcher(graph)
# 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.match("Person", name="张三").first()

graph.delete(zs)
#graph.delete_all() 删除所有内容(慎用)
graph.delete_all()

2.8 创建图模型

from py2neo.ogm import GraphObject, Property

class Person(GraphObject):
    __primarykey__ = "name"

    name = Property()
    age = Property()

3 整体测试

3.1 代码运行

整体运行代码如下所示

from py2neo import  Graph, Node, Relationship, NodeMatcher

graph = Graph("bolt://localhost:7687", auth=("neo4j", "12345678"))

# 创建节点
zs= Node("Person", name="张三")
ls = Node("Person", name="李四")

# 创建关系
knows = Relationship(zs, "knows", ls)

#将节点和关系写入数据库
graph.create(zs | ls | knows)

matcher = NodeMatcher(graph)
# 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.match("Person", name="张三").first()
zs["age"] = 30
graph.push(zs)  # 将更改推送到数据库

# 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.match("Person", name="张三").first()

print("=======执行完成=============")

运行输出如下,表示运行陈工

=======执行完成=============

3.2 图形展示

浏览器打开如下连接,登录neo4j,用户名neo4j,密码12345678

http://127.0.0.1:7474/browser/

如下图所示,输入cypher查询

match (p:Person) return p limit 100

图形化显示如下

reference

---

neo4j installation

https://neo4j.com/docs/operations-manual/current/installation/

neo4j docker

https://hub.docker.com/_/neo4j/tags

Getting started with Neo4j in Docker

https://neo4j.com/docs/operations-manual/current/docker/introduction/

 Neo4j如何修改用户密码?

https://jishuzhan.net/article/1949642748621008897

Python中操作Neo4j图数据库

https://www.cnblogs.com/angelasp/p/18863993

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐