Py2neo查询neo4j周杰伦数据库中的节点、关系和路径教程

news2024/9/24 15:26:10

文章目录

        • py2neo介绍
        • 连接Neo4j数据库
        • py2neo查询图数据库neo4j
          • 数据概览
          • 使用NodeMatcher查询节点
          • 使用RelationshipMatcher查询关系
        • 通过执行Cypher语句查询

py2neo介绍

Neo4j是一款开源图数据库,Py2neo提供了使用Python语言访问Neo4j的接口。本文介绍了使用Py2neoNodeMatcherRelationshipMatcher查询图中的节点和关系,以及通过执行Cypher语句的查询方式。

py2neo版本:2021.2.4

连接Neo4j数据库
from py2neo import Graph, Node, Relationship
# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", name="neo4j", password='admin')
py2neo查询图数据库neo4j
数据概览

在这里插入图片描述
通过graph.schema查询图中节点和关系有哪些类型

graph.schema.node_labels #查询节点类型
frozenset({'album', 'person', 'song'})
graph.schema.relationship_types #查询关系类型
frozenset({'专辑', '作词', '所属专辑', '歌手'})
使用NodeMatcher查询节点

首先创建一个NodeMatcher对象,用match来指明要匹配哪种label的节点,用where来表示筛选条件(有两种方法)。

需要注意的是,匹配成功返回的是NodeMatcher的对象,要转化成Node对象,可以用first取出符合条件的第一个节点,或者转化成节点的list

from py2neo import NodeMatcher

node_matcher = NodeMatcher(graph)  # 节点匹配器
a = node_matcher.match('person',name='周杰伦').all()  # 提取满足属性值的节点

a
[Node('person', name='周杰伦')]

本数据库中基本没有添加节点的属性,所以where函数的用处不大。

where条件有两种写法,一种是把要匹配的属性和值写成key=value的形式,例如where(age=20),这种写法只能按照值是否完全一致来匹配,不能按照值的大小来筛选。

想要按照值的大小筛选或者做一些字符串的模糊匹配,可以把条件表达式写成一个字符串,整体放在where语句中,在这个字符串中,可以用 _ 来代指匹配到的节点。

node = node_matcher.match("Person").where("_.work =~ '月亮.*'").first()
>>>node
Node('Person', 'Teacher', age=45, name='赵赵', work='月亮中学')

>>>nodes = list(node_matcher.match("Person").where("_.age > 20"))
>>>nodes
[Node('Person', age=35, name='王王', work='宇宙电子厂'),
 Node('Person', age=30, name='张张', work='宇宙电子厂'),
 Node('Person', 'Teacher', age=45, name='赵赵', work='月亮中学')]

NodeMatcher返回的结果转化为Node数据类型或者Nodelist之后,访问其中的属性也就十分简单了,如上面最后一例的结果,访问其中第一个节点的name属性:

print(a[0].get('name'))
print(a[0]['name'])

周杰伦
周杰伦
使用RelationshipMatcher查询关系

RelationshipMatchermatch方法有三个及以上参数:

  • 第一个参数是节点的序列或者set,可以为None,为None表示任意节点均可;
  • 第二个参数是关系的类型,可以为None,为None表示任意类型的关系均可;
  • 第三个参数开始是要匹配的属性,写成key=value的形式。

match方法的返回值是RelationshipMatcher类型,需要通过first转化成Relationship数据结构,或者转化为list

eg. 查询所有和蔡依林有关系的实体节点,r_type=None代表提取任意关系。

from py2neo import RelationshipMatcher

relation_matcher = RelationshipMatcher(graph)  # 关系匹配器
node1 = node_matcher.match("person").where(name='蔡依林').first()

relations = relation_matcher.match([node1],r_type=None) # 提取特别属性的关系
for rel in relations:
    print(rel)
(蔡依林)-[:作词 {}]->(毛毛)
(蔡依林)-[:歌手 {}]->(城堡)

查询图中某一类关系,第一个参数为None,第二个参数r_type指定关系类型,这里查询所有的 所属专辑 类型。

relations = relation_matcher.match(None,r_type='所属专辑') # 提取特别属性的关系
for rel in relations:
    print(rel)
(Mine Mine)-[:所属专辑 {}]->(惊叹号)
(Now You See Me)-[:所属专辑 {}]->(周杰伦的床边故事)
(阿爸)-[:所属专辑 {}]->(恋花)
(爱的飞行日记)-[:所属专辑 {}]->(跨时代)
(爱你没差)-[:所属专辑 {}]->(12新作)
(爱情废柴)-[:所属专辑 {}]->(周杰伦的床边故事)
(爱情悬崖)-[:所属专辑 {}]->(叶惠美)
(爱在西元前)-[:所属专辑 {}]->(范特西)
(安静)-[:所属专辑 {}]->(范特西)
(暗号)-[:所属专辑 {}]->(八度空间)
(爸,我回来了)-[:所属专辑 {}]->(范特西)
(白色风车)-[:所属专辑 {}]->(依然范特西)
(依然范特西)-[:所属专辑 {}]->(回想曲青青校树)
(半岛铁盒)-[:所属专辑 {}]->(八度空间)

Relationship其实是包含了一对起止节点:start_nodeend_node,包含了关系的类型,而关系的属性是以字典形式存在的,可以用get方法来获取属性的值。

relations = list(relation_matcher.match(None,r_type='所属专辑')) # 提取特别属性的关系

print(relations[0].start_node['name'])
print(relations[0].end_node['name'])
print(type(relations[0]).__name__)
Mine Mine
惊叹号
所属专辑
通过执行Cypher语句查询

NodeMatcherRelationshipMatcher能够表达的匹配条件相对简单,更加复杂的查询还是需要用Cypher语句来表达。

Py2neo本身支持执行Cypher语句的执行,可以将复杂的查询写成Cypher语句,通过graph.run方法查询,返回的结果可以转化为pandas.DataFrame或者pandas.Series对象,从而和其他数据分析工具无缝衔接。

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

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

相关文章

钉钉机器人发送折线图卡片 工具类代码

钉钉机器人 “创建并投放卡片 接口 ” 可以 发送折线图、柱状图 官方文档:创建并投放卡片 - 钉钉开放平台 0依赖、1模板、2机器人放到内部应用、3放开这个权限 、4工具类、5调用工具类 拼接入参 卡片模板 自己看文档创建,卡片模板的id 有用 0、依赖…

vue2 设置keepAlive之后怎么刷新页面数据

场景:移动端有 A、B、C 三个页面,A、B 页面路由设置了keepAlive属性,有下面两个场景: 1、A 页面 --> B 页面,B 页面刷新。 2、C 页面 --> B页面,B 页面不刷新。 一、分为以下两个情况讨论&#xf…

Linux安装Nginx配置Keepalived高可用

Vmwaire 安装 Linux 解决启动没有IP地址问题 cd /etc/sysconfig/network-scripts vi ifcfg-ens33# 重启linux reboot # 再次查看ip ip addrLinux 镜像地址下载 ps: 发现阿里有一个工具箱,里面有各种镜像 阿里镜像地址 https://developer.aliyun.com/mirror/ 安装…

计算机设计大赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

windows安装部署node.js以及搭建运行第一个Vue项目

一、官网下载安装包 官网地址:https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求,勾选一下下图所示的部分,没有的话除了选择一下node.js安装路径,直接一路next 2、测试安装是否成功 【winR】…

cv_bridge连接自定义版本的opencv

在ros noetic版本中,默认的cv_bridge依赖的opencv版本为4.2.0,若要升级opencv版本,则无法使用cv_bridge,所以需要重新自编译cv_bridge。 一. 编译cv_bridge 1.通过网站 https://github.com/ros-perception/vision_opencv/tree/n…

MYSQL的优化学习,从原理到索引,在到事务和锁机制,最后的主从复制、读写分离和分库分表

mysql的优化学习 为什么选择Mysql不选择其他的数据库?还有哪些,有什么区别? Mysql:开源免费版本可用,适用于中小型应用 Oracle:适用于大型企业级应用,复杂的业务场景和大量数据的处理&#xf…

Acwing 每日一题 空调 差分 贪心

👨‍🏫 空调 👨‍🏫 参考题解 import java.util.Scanner;public class Main {static int N (int) 1e5 10;static int[] a new int[N];static int n;public static void main(String[] args){Scanner sc new Scanner(System.…

智能家居控制系统(51单片机)

smart_home_control_system 51单片机课设,智能家居控制系统 使用及转载请标明出处(最好点个赞及star哈哈) Github地址,带有PPT及流程图 Gitee码云地址,带有PPT及流程图 ​ 以STC89C52为主控芯片,以矩阵键…

【OpenCV C++】Mat img.total() 和img.cols * img.rows 意思一样吗?二者完全相等吗?

文章目录 1 结论及区别2 Mat img的属性 介绍1 结论及区别 在大多数情况下,img.total() 和 img.cols * img.rows 是相等的,但并不总是完全相等的。下面是它们的含义和一些区别: 1.img.total() 表示图像中像素的总数,即图像的总像素数量。2.img.cols * img.rows 也表示图像中…

C++学习笔记:二叉搜索树

二叉搜索树 什么是二叉搜索树?搜索二叉树的操作查找插入删除 二叉搜索树的应用二叉搜索树的代码实现K模型:KV模型 二叉搜索树的性能怎么样? 什么是二叉搜索树? 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用,首先介绍如何安装swagger,测试是否成功;然后列出常用的注释和给出使用例子;最后生成接口文档,并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

代码随想录算法训练营第二十八天|93.复原IP地址 、78.子集、90.子集II

文章目录 [1.复原 IP 地址](https://leetcode.cn/problems/restore-ip-addresses/description/)2.子集[3.子集 II](https://leetcode.cn/problems/subsets-ii/) 1.复原 IP 地址 切割问题可以使用回溯,本题分别两步,切割字符串和判断IP 切割逻辑如下&…

微信小程序 --- 分包加载

分包加载 1. 什么是分包加载 什么是分包加载 ❓ 小程序的代码通常是由许多页面、组件以及资源等组成,随着小程序功能的增加,代码量也会逐渐增加,体积过大就会导致用户打开速度变慢,影响用户的使用体验。 分包加载是一种小程序…

MATLAB图像噪声添加与滤波

在 MATLAB 中添加图像噪声和进行滤波通常使用以下函数: 添加噪声:可以使用imnoise函数向图像添加各种类型的噪声,如高斯噪声、椒盐噪声等。 滤波:可以使用各种滤波器对图像进行滤波处理,例如中值滤波、高斯滤波等。 …

(三)电机控制之方波驱动无刷直流电机(BLDC)与正弦波驱动无刷直流电机(PMSM)的详细对比

电流控制方式和波形: 方波驱动:在每个换相周期内,定子绕组中的电流被切换为高或低两个状态,形成矩形波。通常采用六步换向法,即每60度电角度换相一次,从而产生转矩。正弦波驱动:定子绕组中流过的…

Doris实战——拈花云科的数据中台实践

前言 拈花云科 NearFar X Lab 团队调研并引进 Doris 作为新架构下的数据仓库选型方案。本文主要介绍了拈花云科数据中台架构从 1.0 到 2.0 的演变过程,以及 Doris 在交付型项目和 SaaS 产品中的应用实践。 一、业务背景 拈花云科的服务对象主要是国内各个景区、景点…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

四、西瓜书——支持向量机

第六章 支持向量机 1.间隔与支持向量 支持向量机的原理是寻找与支持向量具有最大间隔的划分超平面。支持向量机具有一个重要性质: 训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关. 首先,超平面的方程为: 点到超平面的距离为&#xff…

爬取博客的图片并且将它存储到响应的目录

目录 前言 思想 注意 不多说解释了,贴代码吧 config.json Get_blog_img.py 把之前的写的代码也贴上 Get_blog_id.py 主函数 main.py 运行结果 前言 在上一篇博客中我们介绍了如何爬取博客链接 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读74…