【大模型:知识图谱】--3.py2neo连接图数据库neo4j
【图数据库】--Neo4j 安装_neo4j安装-CSDN博客
需要打开图数据库Neo4j,
neo4j console
目录
1.图数据库--连接
2.图数据库--操作
2.1.创建节点
2.2.删除节点
2.3.增改属性
2.4.建立关系
2.5.查询节点
2.6.查询关系
3.图数据库--实例
1.图数据库--连接
from py2neo import Graph, Node, Relationshiptest_graph = Graph(host="127.0.0.1",user="neo4j",password="root111111" ) # neo4j的初始密码是neo4j,后续使用自行修改后的密码 )
print(str(test_graph)+"连接成功")
打开之后可能第一次需要修改密码,然后进去之后:http://localhost:7474
2.图数据库--操作
对数据的操作分为两种方式,
- 一种是直接使用neo4j的cypher语法;Create, start, and stop databases - Operations Manual
- 另一种是采用py2neo提供的数据结构和编写方式。
就是一种直接使用数据库语句,另外一种就是使用python对数据库的操作
这里我们先讲诉第二种,
类别 | 方法/函数 | 用途 |
---|---|---|
连接数据库 | Graph(host, port, user, password) | 创建Neo4j数据库连接 |
节点操作 | Node(label, **properties) | 创建节点 |
graph.create(node) | 将节点保存到数据库 | |
graph.push(node) | 更新节点属性到数据库 | |
graph.nodes.match(label, **props) | 匹配符合条件的节点 | |
graph.nodes.get(node_id) | 根据ID获取节点 | |
关系操作 | Relationship(start, type, end, **props) | 创建关系 |
graph.create(relationship) | 将关系保存到数据库 | |
graph.relationships.match() | 匹配关系 | |
查询操作 | graph.run("CYPHER_QUERY") | 执行Cypher查询 |
graph.evaluate("CYPHER_QUERY") | 执行查询并返回单个结果 | |
事务管理 | graph.begin() | 开始事务 |
tx.commit() | 提交事务 | |
tx.rollback() | 回滚事务 | |
批量操作 | Subgraph(nodes, relationships) | 创建子图用于批量操作 |
graph.create(subgraph) | 批量保存节点和关系 | |
索引约束 | graph.run("CREATE INDEX...") | 创建索引 |
graph.run("CREATE CONSTRAINT...") | 创建约束 | |
数据删除 | graph.delete(node/relationship) | 删除节点或关系 |
graph.delete_all() | 删除所有数据 | |
实用功能 | graph.schema | 获取数据库元信息 |
graph.service.ready() | 检查数据库是否可用 |
2.1.创建节点
# 创建节点
test_node1 = Node("Person",name = "大明")
test_node2 = Node("Person",name = "小王")
test_node3 = Node("Person",name = "小李")#保存节点到数据库
test_graph.create(test_node1)
test_graph.create(test_node2) #节点的保存是异步的,可以使用create或merge,推荐使用merge,参考下方的补充
test_graph.create(test_node3)# test_graph.merge(test_node1,"Person","name")
# test_graph.merge(test_node2,"Person","name")
参数 | 类型 | 说明 |
---|---|---|
"Person" | str | 节点标签(Label),表示节点的类别(可定义多个标签,如 Node("Person", "Student", ...) ) |
name="小王" | **kwargs | 节点属性(键值对形式),name 是属性名,"小王" 是属性值。可定义多个属性(如 age=25 ) |
2.2.删除节点
#删除节点
test_graph.delete(test_node3)
#删除所以节点
# test_graph.delete_all()
2.3.增改属性
test_node1['age'] = 20#对节点的属性进行本地修改
test_graph.push(test_node1)#节点属性的更新test_node1['age'] = 22
test_graph.push(test_node1)test_node2['情况'] = '特别地' #对关系的属性进行本地修改
test_graph.push(test_node2)
2.4.建立关系
节点间的关系(Relationship)是有向的,所以在建立关系的时候,必须定义一个起始节点和一个结束节点。值得注意的是,起始节点可以和结束节点是同一个点,这时候的关系就是这个点指向它自己。
如果建立关系的时候,起始节点或者结束节点不存在,则在建立关系的同时建立这个节点。可利用这一点缩减代码量,但会影响独立节点的生成。
#创建关系
node_1_feel_node_2 = Relationship(test_node1,'羡慕',test_node2)
node_2_feel_node_1 = Relationship(test_node2,'仰慕',test_node1)test_graph.create(node_1_feel_node_2)
test_graph.create(node_2_feel_node_1) #关系也要通过“建立”这一步才能实现
2.5.查询节点
py2neo提供了专门的查询模块,即
- NodeMatcher:节点查询
- RelationshipMatcher:关系查询
from py2neo import NodeMatcher# 初始化 NodeMatcher
matcher = NodeMatcher(test_graph) # test_graph 是 Graph 对象# 查询格式
results = matcher.match("Label", key1=value1, key2=value2, ...)
方法 | 说明 |
---|---|
.match("Label", **properties) | 匹配指定标签和属性的节点 |
.get(node_id) | 根据节点 ID 获取节点 |
.first() | 返回第一个匹配的节点 |
.all() | 返回所有匹配的节点(列表) |
.where(condition) | 使用条件表达式过滤(如 .where("_.age > 30") ) |
#查询
from py2neo import NodeMatcher# 初始化 NodeMatcher
matcher = NodeMatcher(test_graph) # test_graph 是 Graph 对象
# 查询所有 "Person" 标签的节点
persons = matcher.match("Person").all()# 查询 name="小王" 的 Person 节点
xiao_wang = matcher.match("Person", name="小王").first()# 查询 age > 25 的 Person 节点
adults = matcher.match("Person").where("_.age > 25").all()
2.6.查询关系
RelationshipMatcher
方法 | 说明 |
---|---|
.match(nodes, r_type, **properties) | nodes:节点, r_type:关系类型 **properties:关系的属性过滤条件 |
.get(relationship_id) | 根据 ID 获取关系 |
.first() | 返回第一个匹配的关系 |
.all() | 返回所有匹配的关系(列表) |
#关系查询
from py2neo import RelationshipMatcher# 初始化 RelationshipMatcher
matcher = RelationshipMatcher(test_graph) # test_graph 是 Graph 对象# 查询所有关系
relationships = matcher.match().all()# 查询所有 "羡慕" 关系
feelings = matcher.match(r_type="羡慕").all()
3.图数据库--实例
from py2neo import Graph, Node, Relationship, Subgraphtest_graph = Graph(host="127.0.0.1",user="neo4j",password="root111111" ) # neo4j的初始密码是neo4j,后续使用自行修改后的密码 )
print(str(test_graph)+"连接成功")# 清空数据库
test_graph.delete_all()
print("数据库清空成功")tx = test_graph.begin()# 开启事务# 创建节点
jiazhen = Node("Person", name="陈家珍", age=66)
fugui = Node("Person", name='徐福贵', age=67)
youqian = Node("Person", name="徐有钱")
renxing = Node("Person", name="徐任性")cat = Node("Person", name='cat')
dog = Node("Person", name='dog')# 创建关系
wife = Relationship(fugui, "WIFE", jiazhen)
brother_1 = Relationship(fugui, "BROTHER", youqian)
brother_2 = Relationship(fugui, "BROTHER", renxing)
hus = Relationship(jiazhen, 'HUS', fugui)
know = Relationship(cat, 'KNOWS', dog)# 创建子图
relation_list = Subgraph(relationships=[wife, brother_2, brother_1, hus, know])# 写入数据库
tx.create(relation_list)
test_graph.commit(tx)
print("关系写入成功")
实例2:
Neo4j Community Edition(社区版)
Neo4j Enterprise Edition(企业版)。才能创建多个数据库
相关文章:

【大模型:知识图谱】--3.py2neo连接图数据库neo4j
【图数据库】--Neo4j 安装_neo4j安装-CSDN博客 需要打开图数据库Neo4j, neo4j console 目录 1.图数据库--连接 2.图数据库--操作 2.1.创建节点 2.2.删除节点 2.3.增改属性 2.4.建立关系 2.5.查询节点 2.6.查询关系 3.图数据库--实例 1.图数据库--连接 fr…...

如何理解机器人课程的技术壁垒~壁垒和赚钱是两件不同的事情
答疑: 有部分朋友私聊说博客内容,越来越不适合人类阅读习惯…… 可以做这种理解,我从23年之后,博客会不会就是写给机器看的。 或者说我在以黑盒方式测试AI推荐的风格。 主观-客观-主观螺旋式发展过程。 2015最早的一篇博客重…...
如何从零开始建设一个网站?
当你没有建站的基础和建站的知识,那么应该如何开展网站建设和网站管理。而今天的教程是不管你是为自己建站还是为他人建站都适合的。本教程会指导你如何进入建站,将建站的步骤给大家分解: 首先我们了解一下,建站需要那些步骤和流程…...

selinux firewalld
一、selinux 1.说明 SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux; SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用 DAC(Discretionary Access Cont…...

408第一季 - 数据结构 - 字符串和KMP算法
闲聊 这章属于难点但考频低 3个名词记一下:模式匹配,主串,字串(模式串) 举个例子 主串 aabaaaabaab 字串 aabaab 模式匹配 从主串找到字串 暴力解法 也是不多说 很暴力就是了 KMP算法 next数组 它只和字串有关 先…...

如何查看自己电脑安装的Java——JDK
开始->运行->然后输入cmd进入dos界面 (快捷键windows->输入cmd) 输入java -version,回车 出现了一下信息就是安装了jdk 输入java -verbose,回车 查看安装目录...
青少年编程与数学 01-011 系统软件简介 07 iOS操作系统
青少年编程与数学 01-011 系统软件简介 07 iOS操作系统 一、发展历程(一)诞生初期(2007 - 2008年)(二)功能拓展与升级(2009 - 2013年)(三)持续优化与创新&…...

电力系统时间同步系统之三
2.6 电力系统时间同步装置 时间同步装置主要完成时间信号和时间信息的同步传递,并提供相应的时间格式和物理接口。时间同步装置主要由三大部分组成:时间输入、内部时钟和时间输出,如图 2-25 所示。输入装置的时间信号和时间信息的精度必须不…...

火语言RPA--界面应用详解
新建一个界面应用后,软件将自动弹出一个界面设计器,本篇将介绍下流程设计器中各部分的功能。 UI控件列表 显示软件中自带的所有UI控件流程库 流程是颗粒组件的容器,可在建立的流程中添加颗粒组件编写成规则流程。 流程编辑好后再绑定UI控件…...

基于Spring Boot的云音乐平台设计与实现
基于Spring Boot的云音乐平台设计与实现——集成协同过滤推荐算法的全栈项目实战 📖 文章目录 项目概述技术选型与架构设计数据库设计后端核心功能实现推荐算法设计与实现前端交互设计系统优化与性能提升项目部署与测试总结与展望 项目概述 🎯 项目背…...

Neovim - 打造一款属于自己的编辑器(一)
文章目录 前言(劝退)neovim 安装neovim 配置配置文件位置第一个 hello world 代码拆分 neovim 配置正式配置 neovim基础配置自定义键位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自动补全括号 / 引号 插件配置 前言(劝退&am…...

RAG检索系统的两大核心利器——Embedding模型和Rerank模型
在RAG系统中,有两个非常重要的模型一个是Embedding模型,另一个则是Rerank模型;这两个模型在RAG中扮演着重要角色。 Embedding模型的作用是把数据向量化,通过降维的方式,使得可以通过欧式距离,余弦函数等计算…...

CLion社区免费后,使用CLion开发STM32相关工具资源汇总与入门教程
Clion下载与配置 Clion推出社区免费,就是需要注册一个账号使用,大家就不用去找破解版版本了,jetbrains家的IDEA用过的都说好,这里嵌入式领域也推荐使用。 CLion官网下载地址 安装没有什么特别,下一步就好。 启动登录…...

第21讲、Odoo 18 配置机制详解
Odoo 18 配置机制详解:res.config.settings 与 ir.config_parameter 原理与实战指南 在现代企业信息化系统中,灵活且可维护的系统参数配置是模块开发的核心能力之一。Odoo 作为一款高度模块化的企业管理软件,其参数配置机制主要依赖于两个关…...
LinkedList、Vector、Set
LinkedList 基本概念 LinkedList 是一个双向链表的实现类,它实现了 List、Deque、Queue 和 Cloneable 接口,底层使用双向链表结构,适合频繁插入和删除操作。 主要特点 有序,可重复。 查询速度较慢,插入/删除速度较…...
SQL 基础入门
SQL 基础入门 SQL(全称 Structured Query Language,结构化查询语言)是用于操作关系型数据库的标准语言,主要用于数据的查询、新增、修改和删除。本文面向初学者,介绍 SQL 的基础概念和核心操作。 1. 常见的 SQL 数据…...
GitHub 趋势日报 (2025年06月05日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 1472 onlook 991 HowToCook 752 ChinaTextbook 649 quarkdown 451 scrapy 324 age…...
基于Flask框架的前后端分离项目开发流程是怎样的?
基于Flask框架的前后端分离项目开发流程可分为需求分析、架构设计、并行开发、集成测试和部署上线五个阶段。以下是详细步骤和技术要点: 一、需求分析与规划 1. 明确项目边界 功能范围:确定核心功能(如用户认证、数据管理、支付流程&#…...
Delphi SetFileSecurity 设置安全描述符
在Delphi中,使用Windows API函数SetFileSecurity来设置文件或目录的安全描述符时,你需要正确地构建一个安全描述符(SECURITY_DESCRIPTOR结构)。这个过程涉及到几个步骤,包括创建或修改安全描述符、设置访问控制列表&am…...
rec_pphgnetv2完整代码学习(二)
六、TheseusLayer PaddleOCRv5 中的 TheseusLayer 深度解析 TheseusLayer 是 PaddleOCRv5 中 rec_pphgnetv2 模型的核心网络抽象层,提供了强大的网络结构调整和特征提取能力。以下是对其代码的详细解读: 1. 整体设计思想 核心概念: 网络…...

【计算机网络】Linux下简单的TCP服务器(超详细)
服务端 创建套接字 💻我们将TCP服务器封装成一个类,当我们定义出一个服务器对象后需要马上对服务器进行初始化,而初始化TCP服务器要做的第一件事就是创建套接字。 TCP服务器在调用socket函数创建套接字时,参数设置如下࿱…...
go中的接口返回设计思想
go中的接口返回设计思想 前言 在学习AI编码过程中,产生了类似以下结构的代码 : type MQClient interface {PublishMessage(queue string, message interface{}) error...... } ... type RabbitMQClient struct {conn *amqp.Connectionchannel *amqp.C…...

最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...

html+css+js趣味小游戏~Cookie Clicker放置休闲(附源码)
下面是一个简单的记忆卡片配对游戏的完整代码,使用HTML、CSS和JavaScript实现: html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…...
宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found
如果在 宝塔面板 安装了 Node.js,但运行 node -v 或 npm -v 时提示 command not found,通常是因为 Node.js 的路径未正确添加到系统环境变量。以下是解决方法: 1. 确认 Node.js 是否安装成功 (1)检查宝塔面板的 Node.…...

SDC命令详解:使用set_propagated_clock命令进行约束
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 指定端口列表/集合 简单使用 注意事项 传播时钟是在进行了时钟树综合后,使用set_propagated_clock命令可以将一个理想时钟转换为传播时钟&#x…...

win32相关(消息Hook)
消息Hook 要想实现消息Hook需要使用到三个相关的Api SetWindowsHookEx // 设置钩子CallNextHookEx // 将钩子信息传递到当前钩子链中的下一个子程序UnhookWindowsHookEx // 卸载钩子 我们编写的消息钩子需要将设置钩子的函数写到dll里面,当钩住一个线程后ÿ…...
vue3单独封装表单校验函数
1.在页面中建一个.ts文件 import { useI18n } from /hooks/web/useI18n import { FormItemRule } from element-plusconst { t } useI18n()interface LengthRange {min: numbermax: numbermessage?: string } //必输项校验 export const useValidator () > {const requi…...

mysql 页的理解和实际分析
目录 页(Page)是 Innodb 存储引擎用于管理数据的最小磁盘单位B树的一般高度记录在页中的存储 innodb ibd文件innodb 页类型分析ibd文件查看数据表的行格式查看ibd文件 分析 ibd的第4个页:B-tree Node类型先分析File Header(38字节-描述页信息…...
分享一道力扣
刚刚笔试遇到的。好像很简单,但又不容易写的 611 有效三角形 def triangleNumber(self, nums):count 0nums.sort()for i in range(len(nums) - 2):k i 2for j in range(i 1, len(nums) - 1):if nums[i] 0:breakwhile k < len(nums) and nums[i] nums[j] &g…...