【Python】py2neo 库:连接和操作 Neo4j 图数据库

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 库,特别适合构建图数据库应用和做图结构数据的快速原型开发。

你可能感兴趣的:(Python基础,Neo4j,Cypher,py2neo,neo4j,图数据库,python)