【大模型:知识图谱】--3.py2neo连接图数据库neo4j

news2025/6/8 8:58:11

【图数据库】--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, Relationship

test_graph = Graph(host="127.0.0.1",
                   user="neo4j",
                   password="root111111" ) # neo4j的初始密码是neo4j,后续使用自行修改后的密码 )
print(str(test_graph)+"连接成功")

打开之后可能第一次需要修改密码,然后进去之后:http://localhost:7474

2.图数据库--操作

对数据的操作分为两种方式,

  1. 一种是直接使用neo4j的cypher语法;Create, start, and stop databases - Operations Manual
  2. 另一种是采用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提供了专门的查询模块,即

  1. NodeMatcher:节点查询
  2. 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, Subgraph

test_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(企业版)​​。才能创建多个数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2403949.html

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

相关文章

如何理解机器人课程的技术壁垒~壁垒和赚钱是两件不同的事情

答疑: 有部分朋友私聊说博客内容,越来越不适合人类阅读习惯…… 可以做这种理解,我从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,回车 查看安装目录

电力系统时间同步系统之三

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 作为一款高度模块化的企业管理软件,其参数配置机制主要依赖于两个关…

【计算机网络】Linux下简单的TCP服务器(超详细)

服务端 创建套接字 💻我们将TCP服务器封装成一个类,当我们定义出一个服务器对象后需要马上对服务器进行初始化,而初始化TCP服务器要做的第一件事就是创建套接字。 TCP服务器在调用socket函数创建套接字时,参数设置如下&#xff1…

最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

html+css+js趣味小游戏~Cookie Clicker放置休闲(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

SDC命令详解:使用set_propagated_clock命令进行约束

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

win32相关(消息Hook)

消息Hook 要想实现消息Hook需要使用到三个相关的Api SetWindowsHookEx // 设置钩子CallNextHookEx // 将钩子信息传递到当前钩子链中的下一个子程序UnhookWindowsHookEx // 卸载钩子 我们编写的消息钩子需要将设置钩子的函数写到dll里面&#xff0c;当钩住一个线程后&#xff…

mysql 页的理解和实际分析

目录 页&#xff08;Page&#xff09;是 Innodb 存储引擎用于管理数据的最小磁盘单位B树的一般高度记录在页中的存储 innodb ibd文件innodb 页类型分析ibd文件查看数据表的行格式查看ibd文件 分析 ibd的第4个页&#xff1a;B-tree Node类型先分析File Header(38字节-描述页信息…

构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源

该图像是使用 AI 图像创建程序创建的。 这个故事是在多位人工智能助手的帮助下写成的。 这是构建MCP 服务器教程&#xff08;共四部分&#xff09;的第二部分。在第一部分中&#xff0c;我们使用基本资源创建了第一个 MCP 服务器。现在&#xff0c;我们将使用资源模板扩展服务…

【算法设计与分析】实验——汽车加油问题, 删数问题(算法实现:代码,测试用例,结果分析,算法思路分析,总结)

说明&#xff1a;博主是大学生&#xff0c;有一门课是算法设计与分析&#xff0c;这是博主记录课程实验报告的内容&#xff0c;题目是老师给的&#xff0c;其他内容和代码均为原创&#xff0c;可以参考学习&#xff0c;转载和搬运需评论吱声并注明出处哦。 4-1算法实现题 汽车…

【C++进阶篇】C++11新特性(下篇)

C函数式编程黑魔法&#xff1a;Lambda与包装器实战全解析 一. lambda表达式1.1 仿函数使用1.2 lambda表达式的语法1.3 lambda表达式使用1.3.1 传值和传引用捕捉1.3.2 隐式捕捉1.3.3 混合捕捉 1.4 lambda表达式原理1.5 lambda优点及建议 二. 包装器2.1 function2.2 bind绑定 三.…