Python 操作 Neo4J,Python 库 Py2Neo

Py2Neo 是一个与 Neo4j 图数据库交互的 Python 库,提供了丰富的 API,使得 Python 程序能够轻松地进行数据查询、插入、更新等操作。以下是对 Py2Neo 库的详细介绍,包括安装、基本操作以及常见的使用方法。


1. 安装 Py2Neo

首先安装 Py2Neo,可以使用 pip 命令:

bash 复制代码
pip install py2neo

2. 连接到 Neo4j 数据库

在使用 Py2Neo 之前,需要连接到 Neo4j 数据库。确保数据库已启动,并知道连接的地址、用户名和密码。

python 复制代码
from py2neo import Graph

# 创建一个与 Neo4j 数据库的连接
graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))
  • bolt://localhost:7687 是 Neo4j 默认的 Bolt 协议地址。
  • auth=("neo4j", "password") 需要替换为您的用户名和密码。

3. 基本操作

Py2Neo 中,主要的操作包括节点(Node)、关系(Relationship)的创建、查询和更新等。以下介绍每种操作的用法。

3.1 创建节点

使用 Node 类来创建节点,并使用 create 方法将节点存入数据库:

python 复制代码
from py2neo import Node

# 创建一个标签为 "Person",名字为 "Alice" 的节点
alice = Node("Person", name="Alice", age=30)
graph.create(alice)

上面代码创建了一个 Person 标签的节点,并赋予了 nameage 属性。

3.2 创建关系

使用 Relationship 类可以在两个节点之间创建关系:

python 复制代码
from py2neo import Relationship

# 创建一个 Bob 节点
bob = Node("Person", name="Bob", age=25)
graph.create(bob)

# 创建 Alice 和 Bob 的关系
knows_relationship = Relationship(alice, "KNOWS", bob)
graph.create(knows_relationship)

这段代码创建了 Alice 和 Bob 之间的 "KNOWS" 关系。

3.3 查询数据

可以使用 Cypher 查询语言通过 run 方法查询数据。以下是一些常见的查询方式。

  • 查找所有 Person 节点:
python 复制代码
result = graph.run("MATCH (p:Person) RETURN p")
for record in result:
    print(record["p"])
  • 查找特定条件的节点或关系,例如查询名字为 "Alice" 的节点:
python 复制代码
result = graph.run("MATCH (p:Person {name: 'Alice'}) RETURN p")
for record in result:
    print(record["p"])
3.4 更新节点属性

可以使用 run 方法直接执行 Cypher 更新语句,或使用 Node 对象修改属性后保存:

python 复制代码
# 使用 Cypher 语句更新节点
graph.run("MATCH (p:Person {name: 'Alice'}) SET p.age = 31")

# 或者通过更新节点对象属性
alice["age"] = 31
graph.push(alice)  # 将更改推送到数据库
3.5 删除节点和关系

可以使用 delete 方法删除单个节点或关系,也可以使用 Cypher 命令。

  • 删除特定节点:
python 复制代码
graph.delete(alice)
  • 通过 Cypher 删除节点和关系(删除所有 Person 节点及其关系):
python 复制代码
graph.run("MATCH (p:Person) DETACH DELETE p")

4. 批量创建和事务处理

在操作大量数据时,可以利用事务来批量创建节点和关系,以提高效率:

python 复制代码
from py2neo import Transaction

# 开始事务
with graph.begin() as tx:
    # 批量创建节点和关系
    alice = Node("Person", name="Alice")
    bob = Node("Person", name="Bob")
    tx.create(alice)
    tx.create(bob)
    tx.create(Relationship(alice, "KNOWS", bob))

这种方法可以减少单个事务的提交次数,提高性能。

5. 高级用法

5.1 使用参数化查询

参数化查询可以帮助避免 SQL 注入风险,并简化复杂查询。

python 复制代码
name = "Alice"
result = graph.run("MATCH (p:Person {name: $name}) RETURN p", name=name)
for record in result:
    print(record["p"])
5.2 使用 Schema 索引和唯一约束

可以使用 Schema 索引来加速查询,并创建唯一约束以避免重复数据。

python 复制代码
# 创建名字属性的索引
graph.schema.create_index("Person", "name")

# 创建唯一约束
graph.schema.create_uniqueness_constraint("Person", "id")
5.3 使用 Graph Data Science (GDS) 算法

Py2Neo 支持调用 Neo4j Graph Data Science 算法库,例如进行社区检测、最短路径等操作:

python 复制代码
# 查找 Alice 和 Bob 之间的最短路径
result = graph.run("""
    MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}),
    path = shortestPath((a)-[*]-(b))
    RETURN path
""")
for record in result:
    print(record["path"])

6. 完整示例

以下代码示例演示了一个小型知识图谱的构建过程,包括节点和关系的创建、查询和更新:

python 复制代码
from py2neo import Graph, Node, Relationship

# 连接 Neo4j 数据库
graph = Graph("bolt://localhost:7687", auth=("neo4j", "password"))

# 创建节点
alice = Node("Person", name="Alice", age=30)
bob = Node("Person", name="Bob", age=25)
carol = Node("Person", name="Carol", age=27)
graph.create(alice)
graph.create(bob)
graph.create(carol)

# 创建关系
graph.create(Relationship(alice, "KNOWS", bob))
graph.create(Relationship(bob, "KNOWS", carol))

# 查询节点
result = graph.run("MATCH (p:Person) RETURN p")
for record in result:
    print(record["p"])

# 更新节点
alice["age"] = 31
graph.push(alice)

# 删除节点和关系
graph.delete(bob)
相关推荐
程序员拂雨16 分钟前
Python知识框架
开发语言·python
灏瀚星空20 分钟前
地磁-惯性-视觉融合制导系统设计:现代空战导航的抗干扰解决方案
图像处理·人工智能·python·深度学习·算法·机器学习·信息与通信
Code_流苏25 分钟前
《Python星球日记》 第72天:问答系统与信息检索
python·微调·问答系统·bert·应用场景·基于检索·基于生成
敲键盘的小夜猫29 分钟前
深入理解Python逻辑判断、循环与推导式(附实战案例)
开发语言·python
Looooking1 小时前
Python 之 selenium 打开浏览器指定端口进行接续操作
python·selenium
Dreams°1231 小时前
【Python爬虫 !!!!!!政府招投标数据爬虫项目--医疗实例项目文档(提供源码!!!)!!!学会Python爬虫轻松赚外快】
分布式·爬虫·python·mysql·scikit-learn
郜太素1 小时前
PyTorch 中神经网络相关要点(损失函数,学习率)及优化方法总结
人工智能·pytorch·python·深度学习·神经网络·学习
L_cl1 小时前
【Python 算法零基础 2.模拟 ④ 基于矩阵】
python·算法·矩阵
玉笥寻珍1 小时前
web安全渗透测试基础知识之登录绕过篇
python·安全·web安全·网络安全·威胁分析
Eric.Lee20211 小时前
conda 输出指定python环境的库 输出为 yaml文件
linux·python·conda