当前位置: 首页 > article >正文

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 查询语言来创建节点和关系,Py2neorun 方法支持执行任何 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 的 NodeRelationship 类来定义图形对象模型。

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 查询则提供了更高效和灵活的操作方式。

主要内容总结:

  1. 连接 Neo4j 数据库:建立与 Neo4j 数据库的连接,并测试连接。
  2. 基本操作:使用 Cypher 创建、查询、更新、删除节点和关系。
  3. 对象图映射 (OGM):将图模型映射为 Python 对象,简化数据库操作。
  4. 高级操作:事务、参数化查询、批量插入等。

希望本教程能帮助你快速上手 Py2neo 并有效地管理你的 Neo4j 图数据库。如果有任何问题或需要进一步的帮助,请随时联系我!


http://www.kler.cn/news/339079.html

相关文章:

  • 实施威胁暴露管理、降低网络风险暴露的最佳实践
  • 面向对象技术——设计模式
  • 通过Dockerfile 安装rabbitMq
  • Linux 基础入门操作 - 第5章 基础文件操作
  • C++面试速通宝典——14
  • 每日OJ题_牛客_平方数_数学_C++_Java
  • 【数据管理】DAMA-元数据专题
  • 2024.9.29 问卷数据分析
  • [win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
  • 实战OpenCV之模板匹配
  • kafka-windows集群部署
  • 职场中的人情世故,你懂了多少?
  • Orecle 迁移 人大金仓数据库 SQL 问题
  • 详解正确创建好SpringBoot项目后但是找不到Maven的问题
  • 进阶岛第3关:LMDeploy 量化部署进阶实践
  • 流浪地球行星发动机
  • 掌握 C# 文件和输入输出操作
  • LabVIEW回转支承间隙自动化检测系统
  • Java面试八股之认证授权
  • 【SQL】掌握SQL查询技巧:高效数据整合与查询优化