Py2neo 教程

news2024/10/9 0:53:03

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.coloradmin.cn/o/2197616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++ 11】nullptr 空指针

文章目录 【 0. 问题背景 】0.1 野指针和悬空指针0.2 传统空指针 NULL0.3 传统空指针的局限性 【 1. 基本用法 】【 2. nullptr 的应用 】2.1 nullptr 解决 NULL 的遗留BUG2.2 简单实例 【 0. 问题背景 】 0.1 野指针和悬空指针 总结 野指针悬空指针产生原因指针变量未被初始…

绕过中间商,不用 input 标签也能搞定文件选择

💰 点进来就是赚到知识点!本文带你用 JS 实现文件选择功能,点赞、收藏、评论更能促进消化吸收! 🚀 想解锁更多 Web 文件系统技能吗?快来订阅专栏「Web 玩转文件操作」! 📣 我是 Jax,…

【机器学习】线性回归算法简介 及 数学实现方法

线性回归 简介 利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 数学公式: ℎ_(w) w_1x_1 w_2x_2 w_3x_3 … b w^Txb 概念 ​ 利用回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关…

易基因: cfMeDIP-seq揭示cfDNA甲基化高效区分原发性和转移性前列腺|Nat Commun

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 前列腺癌(Prostate cancer,PCa)是男性中第二常见的恶性肿瘤,也是全球癌症相关死亡的第三大原因。虽然大多数原发性前列腺癌可以治愈&#…

交易所开发:构建安全、高效、可靠的数字资产交易平台

数字资产交易平台是加密市场中连接用户与数字货币的重要枢纽。开发一个安全、高效、可靠的交易所,不仅需要综合考虑技术架构、安全策略、用户体验等方面,还需严格遵循法规要求以确保合规性。本文总结了交易所开发的关键要素,包括其类型、核心…

振弦式土体沉降计有哪些功能特点

振弦式土体沉降计是一种广泛应用于土木工程领域的测量仪器,用于监测土石坝、边坡、地基等构筑物的沉降变形。以下是南京峟思给大家介绍的振弦式土体沉降计的主要优点: 高精度测量: 振弦式土体沉降计采用先-进的感应技术,能够精确地…

一个月学会Java 第5天 控制结构

Day5 控制结构 这么叫可能有些就算有基础的人也看不懂,其实就是if-else、switch-case、for、while、do-while这几个,没基础的听到了这个也不要慌张,这几个是程序的基础,多多训练就好 第一章 顺序结构 这章其实没有什么好讲的&…

Python 工具库每日推荐【openpyxl 】

文章目录 引言Python Excel 处理库的重要性今日推荐:openpyxl 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动生成月度销售报告案例分析高级特性条件格式数据验证扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计…

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP;H3C-SE;CCIP——…

不容错过的10款文件加密软件,2024顶尖办公文件加密软件分享

随着数据隐私和信息安全越来越受到重视,文件加密已经成为保护个人和企业机密信息的必备工具。无论是敏感的个人文件、财务报表、商业机密,还是政府机密信息,都需要高效的加密工具来确保信息安全不被未经授权的人访问。在2024年,我…

盘点2024年4款打工人都在用的PDF软件。

PDF 软件在现代的办公或者是学习当中的应用非常广泛,已经成了很多人的必备工具。因为PDF 文件具有跨设备、跨系统的优势,所以在很多设备上都可以打开浏览。如果有了PDF 编辑软件,查看,编辑,分享也会变得更加方便简单&a…

web自动化测试基础(从配置环境到自动化实现登录测试用例的执行,vscode如何导入自己的python包)

接下来的一段时间里我会和大家分享自动化测试相关的一些知识希望大家可以多多支持,一起进步。 一、环境的配置 前提安装好了python解释器并配好了环境,并安装好了VScode 下载的浏览器和浏览器驱动需要一样的版本号(只看大版本)。 1、安装浏览器 Chro…

回到原点再出发

原文What Goes Around Comes Around作者Michael Stonebraker & Joseph M. Hellerstein其他译文https://zhuanlan.zhihu.com/p/111322429 1. 摘要 本文总结了近35年来的数据模型方案,分成9个不同的时代,讨论了每个时代的方案。我们指出,…

Vue3入门 - provide和inject组合使用

在Vue3中&#xff0c;provide和inject是用于实现依赖注入的一对API。它们允许在组件树中传递和接收数据&#xff0c;而不需要通过每一层显式地传递props。在<script setup>语法中&#xff0c;provide可以用来提供一个值&#xff0c;而inject可以用来接收一个已经提供的值…

RNN(循环神经网络)简介及应用

一、引言 在深度学习领域&#xff0c;神经网络被广泛应用于各种任务&#xff0c;从图像识别到语音合成。但对于序列数据处理的任务&#xff0c;如自然语言处理&#xff08;NLP&#xff09;、语音识别或时间序列预测等&#xff0c;传统的前馈神经网络&#xff08;Feedforward N…

启明智显工业级HMI芯片Model4功耗特性分享

Model4工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片&#xff0c;内置玄铁64bit RISC-V CPU C906&#xff0c;主频高达600MHz&#xff0c;算力约1380DMIPS。支持RTOS、linux系统&#xff0c;支持LVGL工具开发UI&#xff1b; Model4系列工业级MPU具有极强的屏显、多…

每日OJ题_牛客_分组_枚举+二分_C++_Java

目录 牛客_分组_枚举二分 题目解析 C代码 Java代码 牛客_分组_枚举二分 分组 (nowcoder.com) 描述&#xff1a; dd当上了宣传委员&#xff0c;开始组织迎新晚会&#xff0c;已知班里有nnn个同学&#xff0c;每个同学有且仅有一个擅长的声部&#xff0c;把同学们分…

计算机组成原理:物理层 —— 编码与调制

文章目录 基本概念编码&#xff08;基带调制&#xff09;调制编码与调制码元 编码方式双极性不归零编码双极性归零编码曼彻斯特编码差分曼彻斯特编码优缺点 调制方法基本的带通调制方法调频 FM调幅 AM调相 PM 混合调制方法正交振幅调制 QAM-16 基本概念 编码&#xff08;基带调…

全国外卖霸王餐系统对接详细步骤操作?

对接全国外卖霸王餐系统并选择适合的系统时&#xff0c;你可以考虑以下几个步骤和标准&#xff1a; 明确业务需求&#xff1a;首先确定你的平台需要哪些功能&#xff0c;如展示霸王餐选项、下单、支付、订单跟踪等 。选择信誉良好的服务提供商&#xff1a;选择提供稳定服务的A…

【物流配送中心选址问题】基于改进粒子群算法

课题名称&#xff1a; 基于改进粒子群算法的物流配送中心选址问题 改进方向&#xff1a;动态惯性权重优化粒子群算法 代码获取方式&#xff1a; 模型描述&#xff1a; 待补充 Matlab仿真结果&#xff1a; 1. 模型优化后的仿真结果 2. 初始解对应的物流配送路径图 3. 粒子…