Py2neo 教程
Py2neo 教程:Python 访问 Neo4j 图数据库
Py2neo
是一个用于在 Python 中连接和操作 Neo4j 图数据库的库。它为 Neo4j 提供了便捷的 API 接口,使开发者能够轻松地进行图数据库的查询、更新、创建等操作。Py2neo
支持 Neo4j 的原生查询语言 Cypher,并且可以将图形数据模型直接映射为 Python 对象,极大地简化了数据操作流程。
官方文档链接
Py2neo 官方文档 提供了完整的功能介绍和使用说明。
一、安装
在开始使用 Py2neo
之前,需要先安装这个库。可以使用以下命令进行安装:
pip install py2neo
安装 Neo4j 数据库
在本地安装并启动 Neo4j 数据库后,可以在浏览器中打开 http://localhost:7474
来进行访问。Neo4j 默认用户名为 neo4j
,密码在首次安装时设置。
二、连接到 Neo4j 数据库
在使用 Py2neo
连接到 Neo4j 数据库时,需要提供数据库的 URI 和登录凭据。
from py2neo import Graph
# 创建 Graph 对象,连接到 Neo4j 数据库
graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))
# 测试连接
try:
graph.run("RETURN 1")
print("连接成功!")
except Exception as e:
print("连接失败:", e)
参数说明
bolt://localhost:7687
:Neo4j 的 Bolt 协议地址,默认端口为 7687。auth=("neo4j", "password")
:用户名和密码。
三、基础操作
1. 创建节点和关系
我们可以使用 Cypher 查询语言来创建节点和关系,Py2neo
的 run
方法支持执行任何 Cypher 查询。
# 创建两个节点,并创建它们之间的关系
graph.run("""
CREATE (a:Person {name: 'Alice', age: 30})
CREATE (b:Person {name: 'Bob', age: 25})
CREATE (a)-[:KNOWS]->(b)
""")
print("节点和关系创建成功!")
2. 查询节点和关系
我们可以使用 Cypher 查询来获取节点和关系,并将查询结果转换为 Python 对象或字典形式。
# 查询名为 Alice 的 Person 节点
result = graph.run("MATCH (p:Person {name: 'Alice'}) RETURN p")
# 获取查询结果中的单个节点
alice = result.evaluate()
print("Alice 节点数据:", alice)
3. 更新节点属性
可以使用 SET
关键字来更新节点的属性。
# 更新节点 Alice 的年龄
graph.run("MATCH (p:Person {name: 'Alice'}) SET p.age = 31")
print("更新成功!")
4. 删除节点和关系
可以使用 DELETE
关键字来删除节点和关系。
# 删除名为 Bob 的节点及其关系
graph.run("MATCH (p:Person {name: 'Bob'}) DETACH DELETE p")
print("节点 Bob 已删除!")
四、使用 Py2neo OGM (对象图映射)
Py2neo
提供了一个对象图映射 (OGM) 系统,允许我们将图形模型直接映射到 Python 对象,从而实现更直观的操作。
1. 定义类模型
可以使用 Py2neo 的 Node
和 Relationship
类来定义图形对象模型。
from py2neo import Node, Relationship
# 创建 Person 节点和 KNOWS 关系
alice = Node("Person", name="Alice", age=30)
bob = Node("Person", name="Bob", age=25)
knows = Relationship(alice, "KNOWS", bob)
# 将节点和关系加入图数据库
graph.create(alice | bob | knows)
print("节点和关系已加入数据库!")
2. 使用 GraphObject 定义类
GraphObject
提供了一种简化方式,将节点和关系封装为 Python 类。
from py2neo.ogm import GraphObject, Property, RelatedTo
# 定义 Person 类模型
class Person(GraphObject):
__primarykey__ = "name"
name = Property()
age = Property()
knows = RelatedTo("Person", "KNOWS")
# 创建 Person 实例并保存到数据库
alice = Person()
alice.name = "Alice"
alice.age = 30
alice.knows.add(bob)
# 使用 Graph 的 push 方法将对象保存到数据库
graph.push(alice)
print("Person 对象已保存!")
3. 查询 OGM 对象
可以使用 GraphObject 提供的 select
方法来查询对象。
# 查询名为 Alice 的 Person 对象
alice = Person.select(graph, "Alice").first()
print("Alice 的年龄:", alice.age)
五、高级操作
1. 使用事务
在需要一次性执行多个操作时,可以使用事务管理器 (Transaction
) 保证操作的原子性。
with graph.begin() as tx:
# 创建多个节点和关系
tx.run("CREATE (p:Person {name: 'Charlie', age: 35})")
tx.run("CREATE (p:Person {name: 'David', age: 40})")
tx.commit()
print("事务已提交!")
2. 使用参数化查询
在查询中使用参数化可以提升安全性,防止 Cypher 注入攻击。
# 使用参数化查询更新年龄
name = "Alice"
new_age = 32
graph.run("MATCH (p:Person {name: $name}) SET p.age = $new_age", name=name, new_age=new_age)
print("年龄已更新!")
3. 批量插入节点和关系
使用 merge
方法可以批量插入节点和关系,merge
会在节点或关系不存在时创建,而存在时更新。
# 批量插入节点和关系
data = [
{"name": "Alice", "knows": ["Bob", "Charlie"]},
{"name": "Bob", "knows": ["David"]},
{"name": "Charlie", "knows": []},
{"name": "David", "knows": ["Alice"]}
]
for person in data:
p = Node("Person", name=person["name"])
graph.merge(p, "Person", "name") # 如果节点已存在则更新
for friend in person["knows"]:
f = Node("Person", name=friend)
graph.merge(f, "Person", "name")
rel = Relationship(p, "KNOWS", f)
graph.merge(rel)
print("批量插入完成!")
六、总结
Py2neo
是一个强大且灵活的 Neo4j Python 客户端,通过它可以便捷地在 Python 中进行图数据库的操作。其 OGM 功能可以帮助我们以 Python 对象的方式进行图数据库的增删改查,而 Cypher 查询则提供了更高效和灵活的操作方式。
主要内容总结:
- 连接 Neo4j 数据库:建立与 Neo4j 数据库的连接,并测试连接。
- 基本操作:使用 Cypher 创建、查询、更新、删除节点和关系。
- 对象图映射 (OGM):将图模型映射为 Python 对象,简化数据库操作。
- 高级操作:事务、参数化查询、批量插入等。
希望本教程能帮助你快速上手 Py2neo
并有效地管理你的 Neo4j 图数据库。如果有任何问题或需要进一步的帮助,请随时联系我!
原文地址:https://blog.csdn.net/jixiaoyu0209/article/details/142771475
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!