Python 中的 py2neo
库
py2neo
是 Python 中用于连接和操作 Neo4j 图数据库 的高级客户端库。它提供了面向对象的接口,使得 Python 程序员能够方便地与 Neo4j 数据库进行交互,包括:
- 创建节点与关系(Relationship)
- 执行 Cypher 查询
- 图数据建模
- 数据导入导出等操作
1. 安装 py2neo
pip install py2neo
你还需要有一个正在运行的 Neo4j 数据库,可以本地安装,也可以连接远程服务器(例如 Neo4j Aura)。
2. 快速连接 Neo4j
from py2neo import Graph
# 本地默认配置(bolt://localhost:7687)
graph = Graph("bolt://localhost:7687", auth=("neo4j", "your_password"))
3. 创建节点(Node)和关系(Relationship)
from py2neo import Node, Relationship
# 创建节点
alice = Node("Person", name="Alice")
bob = Node("Person", name="Bob")
# 创建关系
knows = Relationship(alice, "KNOWS", bob)
# 将节点和关系写入数据库
graph.create(alice | bob | knows)
Node(label, **属性)
Relationship(起点, 关系类型, 终点)
4. 执行 Cypher 查询
# 查询所有 Person 节点
results = graph.run("MATCH (p:Person) RETURN p.name").data()
for result in results:
print(result["p.name"])
.run(query)
:执行任意 Cypher 查询.data()
:将查询结果以字典形式返回
5. 使用 NodeMatcher
查找节点
from py2neo.matching import NodeMatcher
matcher = NodeMatcher(graph)
# 查找标签为 Person 且 name 为 Alice 的节点
alice = matcher.match("Person", name="Alice").first()
print(alice)
.match(label, **属性)
:匹配标签和属性.first()
:返回第一个匹配项
6. 更新节点属性
alice["age"] = 30
graph.push(alice) # 将更改推送到数据库
7. 删除节点和关系
删除节点(需先删除与其相关的关系):
graph.delete(knows)
graph.delete(bob)
或者使用 graph.separate()
分离关系、graph.delete_all()
删除所有内容(慎用):
graph.delete_all()
8. 创建图模型(可选)
py2neo
支持类建模(GraphObject):
from py2neo.ogm import GraphObject, Property
class Person(GraphObject):
__primarykey__ = "name"
name = Property()
age = Property()
9. 常用类和方法简表
类 / 方法 | 说明 |
---|---|
Graph() | 连接数据库 |
Node() | 创建节点 |
Relationship() | 创建关系 |
graph.create() | 向数据库写入节点/关系 |
graph.run() | 执行 Cypher 查询 |
NodeMatcher() | 查找节点 |
graph.delete() | 删除节点或关系 |
graph.push() | 更新节点/关系属性 |
graph.pull() | 拉取数据库中最新属性 |
10. 示例:完整流程
from py2neo import Graph, Node, Relationship, NodeMatcher
# 连接数据库
graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))
# 创建节点和关系
alice = Node("Person", name="Alice")
bob = Node("Person", name="Bob")
rel = Relationship(alice, "FRIEND", bob)
graph.create(alice | bob | rel)
# 查询并更新节点
matcher = NodeMatcher(graph)
found = matcher.match("Person", name="Alice").first()
found["age"] = 28
graph.push(found)
11. py2neo
适用场景
- 图数据库建模:社交网络、知识图谱、推荐系统
- 复杂关系查询:比如“某人认识谁的朋友”
- Cypher 脚本管理和自动化操作
- 与机器学习/NLP 集成使用图结构建模数据
12. 与其他 Neo4j Python 驱动对比
驱动 | 特点 |
---|---|
py2neo | 高级封装,易于上手,面向对象 |
neo4j (官方驱动) | 底层操作,性能好但略繁琐 |
neomodel | Django 风格 ORM,适合模型驱动开发 |
13. 小结
功能 | 方法 |
---|---|
连接数据库 | Graph(...) |
创建节点 | Node(...) |
创建关系 | Relationship(...) |
插入数据 | graph.create() |
查找节点 | NodeMatcher(graph).match() |
执行查询 | graph.run() |
更新属性 | graph.push() |
删除节点关系 | graph.delete() |
清空数据库 | graph.delete_all() |
py2neo
是一个功能强大、语法友好、支持对象建模的 Neo4j Python 库,特别适合构建图数据库应用和做图结构数据的快速原型开发。