Cypher语句查询neo4j数据库教程
文章目录
- Cypher介绍
- 执行Cypher语句查询
- 总结
Cypher介绍
NodeMatcher和RelationshipMatcher能够表达的匹配条件相对简单,更加复杂的查询还是需要用Cypher语句来表达。
Py2neo本身支持执行Cypher语句的执行,可以将复杂的查询写成Cypher语句,通过graph.run方法查询,返回的结果可以转化为pandas.DataFrame或者pandas.Series对象,从而和其他数据分析工具无缝衔接。
执行Cypher语句查询
- 查询某类所有节点
cypher_ = "MATCH (n:person) RETURN n.name as name"df = graph.run(cypher_).to_data_frame() # pd.DataFrame
df
name
0 周杰伦
1 蔡依林
2 方文山
3 洪荣宏
4 杨瑞代
5 黄淩嘉
6 徐若瑄
7 许世昌
8 梁心颐
9 宋健彰
10 张惠妹
11 李玟
12 天台 声带
13 黄俊郎
14 陈镇川
15 古小力
16 袁咏琳
17 刘畊宏
18 弹头
19 李心艾
20 黄婕熙
21 罗宇轩
22 李汪哲
23 邱凯伟
24 杨常青
25 曾郁婷
26 毛毛
27 唐从圣
28 费玉清
29 黄凌嘉
30 陈奕迅
31 魏如昀
32 南拳妈妈
33 宇豪
34 许茹芸
35 齐秦
36 吴宗宪
37 温岚
38 潘儿
查询所有专辑
cypher_ = "MATCH (n:album) RETURN n.name as name"df = graph.run(cypher_).to_data_frame() # pd.DataFrame
df
name
0 惊叹号
1 周杰伦的床边故事
2 恋花
3 跨时代
4 12新作
5 叶惠美
6 范特西
7 八度空间
8 依然范特西
9 最伟大的作品
10 看我72变
11 我很忙
12 天台爱情
13 Promise
14 魔杰座
15 Jay
16 寻找周杰伦
17 十一月的萧邦
18 11月的萧邦
19 七里香
20 城堡
21 袁咏琳 Cindy
22 哎呦,不错哦
23 浪花兄弟
24 Lucky Number
25 回想曲青青校树
26 范特西PLUS
27 认了吧
28 乐酷·概念合辑
29 南拳妈妈的夏天
30 真爱无敌
31 哎哟,不错哦
32 有点野
33 给你的情书
34 2007世界巡回演唱会
35 温式效应
- 查询某个节点的路径为2的所有路径
cypher_ = "MATCH P=(a)-[*2]-(b)\
WHERE a.name='蔡依林'\
RETURN P"relationship = graph.run(cypher_)
for rel in relationship:print(rel)
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='Dare for more'), Node('person', name='蔡依林')), 歌手(Node('song', name='Dare for more'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='布拉格广场'), Node('person', name='蔡依林')), 歌手(Node('song', name='布拉格广场'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='布拉格广场'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='布拉格广场'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='布拉格广场'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 歌手(Node('album', name='看我72变'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('album', name='看我72变'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='骑士精神'), Node('album', name='看我72变')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='海盗'), Node('person', name='蔡依林')), 作词(Node('song', name='海盗'), Node('person', name='陈镇川')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='海盗'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='海盗'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('person', name='蔡依林'), Node('album', name='城堡')), 所属专辑(Node('song', name='海盗'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('person', name='蔡依林'), Node('album', name='城堡')), 作词(Node('person', name='陈镇川'), Node('album', name='城堡')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='周杰伦')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='你怎么连话都说不清楚'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='你怎么连话都说不清楚'), Node('album', name='Lucky Number')))
Path(Node('person', name='蔡依林'), 作词(Node('person', name='蔡依林'), Node('person', name='毛毛')), 作词(Node('song', name='你怎么连话都说不清楚'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 作词(Node('person', name='蔡依林'), Node('person', name='毛毛')), 作词(Node('person', name='周杰伦'), Node('person', name='毛毛')))
Path(Node('person', name='蔡依林'), 歌手(Node('song', name='骑士精神'), Node('person', name='蔡依林')), 所属专辑(Node('song', name='骑士精神'), Node('album', name='看我72变')))
(蔡依林)<-[:歌手 {}]-(Dare for more)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(布拉格广场)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(布拉格广场)-[:所属专辑 {}]->(看我72变)
(蔡依林)<-[:歌手 {}]-(看我72变)<-[:所属专辑 {}]-(布拉格广场)
(蔡依林)<-[:歌手 {}]-(看我72变)-[:歌手 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(看我72变)<-[:所属专辑 {}]-(骑士精神)
(蔡依林)<-[:歌手 {}]-(海盗)-[:作词 {}]->(陈镇川)
(蔡依林)<-[:歌手 {}]-(海盗)-[:所属专辑 {}]->(城堡)
(蔡依林)-[:歌手 {}]->(城堡)<-[:所属专辑 {}]-(海盗)
(蔡依林)-[:歌手 {}]->(城堡)<-[:作词 {}]-(陈镇川)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:作词 {}]->(周杰伦)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:作词 {}]->(毛毛)
(蔡依林)<-[:歌手 {}]-(你怎么连话都说不清楚)-[:所属专辑 {}]->(Lucky Number)
(蔡依林)-[:作词 {}]->(毛毛)<-[:作词 {}]-(你怎么连话都说不清楚)
(蔡依林)-[:作词 {}]->(毛毛)<-[:作词 {}]-(周杰伦)
(蔡依林)<-[:歌手 {}]-(骑士精神)-[:所属专辑 {}]->(看我72变)
- 查询周杰伦的所有专辑
cypher_ = "MATCH (n:album)-[r]->(m:person) \
where m.name = '周杰伦'\
RETURN type(r) AS type,n.name AS name"album_person = graph.run(cypher_)
for ap in album_person:print(ap)
'歌手' '七里香'
'歌手' '浪花兄弟'
'歌手' '恋花'
'歌手' '跨时代'
'歌手' '12新作'
'歌手' '周杰伦的床边故事'
'歌手' '叶惠美'
'歌手' '范特西'
'歌手' '八度空间'
'歌手' '依然范特西'
'歌手' '最伟大的作品'
'歌手' '看我72变'
'歌手' '我很忙'
- 查询具体两个人的路径在4以内的关系
cypher_ = "MATCH path=(m:person)-[:作词 *1..4]->(n:person) \
WHERE m.name='周杰伦' AND n.name='徐若瑄' \
RETURN path"s = graph.run(cypher_)for l in s:print(l.values()[0])
(周杰伦)-[:作词 {}]->(徐若瑄)
(周杰伦)-[:作词 {}]->(方文山)-[:作词 {}]->(周杰伦)-[:作词 {}]->(徐若瑄)
手动写出path路径的关系网
Path是一个比较复杂的结构,Path中的节点和关系分别用nodes和relationships表示,并且是按照路径上节点和关系的顺序分别存放的。
cypher_ = "MATCH path=(m:person)-[:作词 *1..4]->(n:person) \
WHERE m.name='周杰伦' AND n.name='徐若瑄' \
RETURN path"
s = graph.run(cypher_)for path in s:# 直接打印pathprint(path)# 获取路径中的节点和关系nodes = path.nodesrelationships = path.relationships # 自己组织路径文本path_text = ""for n,r in zip(nodes, relationships):# 每次加入一个节点和一个关系的类型path_text += "{} - {} - ".format(n['name'], type(r).__name__)# 别忘了最后一个节点path_text += nodes[-1]['name'] + '\n'print(path_text)
总结
使用Py2neo查询Neo4j中的节点、关系和路径时,条件简单的查询可以通NodeMatcher和RelationshipMatcher来实现。而较为复杂的查询,可以写成Cypher语句来查询,查询结果可以转化为pandas的DataFrame或者Series数据类型,与其他数据分析工具结合。
相关文章:
Cypher语句查询neo4j数据库教程
文章目录 Cypher介绍执行Cypher语句查询总结 Cypher介绍 NodeMatcher和RelationshipMatcher能够表达的匹配条件相对简单,更加复杂的查询还是需要用Cypher语句来表达。 Py2neo本身支持执行Cypher语句的执行,可以将复杂的查询写成Cypher语句,…...
【ESP32 IDF快速入门】点亮第一个LED灯与流水灯
文章目录 前言一、有哪些工作模式?1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、GPIO操作函数2.1 GPIO 汇总2.2 GPIO操作函数gpio_config配置引脚reset 引脚函数设置引脚电平选中对应引脚设置引脚的方向 2.3 点亮第一个灯 三、流水灯总结 前言 ESP32…...
再见,Visual Basic——曾经风靡一时的编程语言
2020年3月,微软团队宣布了对Visual Basic(VB)的“终审判决”:不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件,自1991年问世以来,便受到了广大…...
【C++精简版回顾】18.文件操作
1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 (1)函数名 文件对象.open (2)函数参数 /* ios::out 可读 ios::in 可…...
【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”
我们在做ArcGIS Engine二次开发时,特别是新手,安装好了开发环境,满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后,却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…...
新项目,Linux上一键安装MySQL,Redis,Nacos,Minio
大家好,我是 jonssonyan 分享一个我的一个开源项目,这是一个在 Linux 平台上一键安装各种软件的脚本项目,脚本使用 Shell 语言编写,后续还会增加更多软件的一键安装,代码在 GitHub 上全部开源的,开源地址如…...
Rust 从 PyTorch 到 Burn
一、性能轮盘赌 机器码相同,但放置在不同的地址上,性能可能截然不同。 作为软件开发人员,我们经常假设特定代码的性能仅由代码本身和运行它的硬件决定。这种假设让我们在优化代码以获得更好性能时感到有控制力。虽然在大多数情况下这种假设…...
Swin-Transformer网络代码实现
还是参考导师级别博主霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 博主写的博客Swin-Transformer网络结构详解_swin transformer-CSDN博客 视频理论讲解12.1 Swin-Transformer网络结构详解_哔哩哔哩_bilibili pytorch实现12.2 使用Pytorch搭建Swin-Transformer网…...
Java ZooKeeper-RocketMQ 面试题
Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 ?2、Zookeeper的工作原理(Zab协议)3、谈谈你对分布式锁的理解,以及分布式锁的实现?4、 zookeeper 是如何保证事务的顺序一致性的?5、 zook…...
css制作瀑布流布局
CSS制作瀑布流布局的步骤如下: HTML结构:使用无序列表ul和列表项li来创建网格布局。 <ul class"grid"><li><img src"image1.jpg"></li><li><img src"image2.jpg"></li><li…...
Redis 的哨兵模式配置
1.配置 vim sentinel.conf# mymaster 给主机起的名字 # 192.168.205.128 主机的ip地址 # 6379 端口号 # 2 当几个哨兵发现主观宕机,则判定为客观宕机。 原则上是大于一半。比如三个哨兵,则设置为 2 sentinel monitor mymaster 192.168.205.128 63…...
基于单片机的继电器参数测试系统设计
摘要:由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时…...
unity 数学 空间四个点是否在同一个平面
问题:已知三维空间中四点A、B、C、D,如何知道四个点是否在同一个平面呢 首先我们知道三点确定一个平面,所以可以由上面四个点其中任意三点组成一个平面p(A,B,C),另外一个点和三个任意点的形成线࿰…...
数据卷dockerfile
目录 一、数据卷 1. 简介 2. 数据卷和数据卷容器 1. 数据卷: 2. 数据卷容器: 二、自定义镜像 1. 作用 2. 自定义centos 3. 自定义tomcat8 一、数据卷 1. 简介 数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直…...
AOP的介绍与使用
文章目录 AOP的概念AOP术语AOP的实现AspectJSpring AOP Spring AOP原理JDK动态代理CGLib动态代理 SpringAOP代码编写规则自定义切面自定义切点自定义通知在通知中获取当前请求代码实例 一些选择题 AOP的概念 • Aspect Oriented Programing,即面向方面(…...
金融行业专题|期货超融合架构转型与场景探索合集(2023版)
更新内容: 更新 SmartX 超融合在期货行业的覆盖范围、部署规模与应用场景。新增 CTP 主席系统实践与评测、容器云资源池等场景实践。更多超融合金融核心生产业务场景实践,欢迎下载阅读电子书《SmartX 金融核心生产业务场景探索文章合集》。 面对不断变…...
08 yum和git
什么是软件包 安装软件,一个通常的办法就是下载程序的源代码进行编译。这种太麻烦,于是一些人把常用软件编译好,做成软件包放在服务器上,通过包管理器可以很方便的得到这个软件包安装,就好比手机上的应用商店 yum&am…...
JMeter元件和采样器一览
Apache JMeter是一个强大的开源负载测试工具,用于性能和功能测试。JMeter提供了丰富的元件和采样器,使得它能够模拟复杂的测试场景和高并发的用户请求。以下是JMeter中常用的一些元件和采样器的介绍和讲解: 测试计划元件 测试计划࿰…...
BF算法的优化之SPFA算法
介绍 全称Shortest Path Faster Algorithm. 优化思想: 1.由int path[maxn]定义的记录最短距离的容器,只有在path[i]value<path[j]时才会更新,它们两者的值相等时path的值仍保持不变。由此优化容器,选择用一个队列来替path数…...
java 基础(核心知识搭配代码)
前言 java的学习分为了上部分以及下部分进行学习,上部分就是对于java的基础知识,面向对象上,面向对象下,异常操作,javaApi;下部主要是集合,泛型,反射,IO流,J…...
Windows 11 LTSC 微软商店恢复指南:5个简单步骤让精简系统重获完整应用生态
Windows 11 LTSC 微软商店恢复指南:5个简单步骤让精简系统重获完整应用生态 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 24…...
Anaconda Navigator打不开?三步搞定‘str‘ object has no attribute ‘get‘报错(附详细文件修改指南)
Anaconda Navigator启动报错深度修复指南:从原理到实战 当你满心期待地双击Anaconda Navigator图标,准备开始一天的数据分析工作,却迎面撞上"str object has no attribute get"这个晦涩的错误提示——这种挫败感我太熟悉了。作为P…...
AMD Ryzen SDT调试工具:释放处理器潜能的终极硬件控制方案
AMD Ryzen SDT调试工具:释放处理器潜能的终极硬件控制方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
华为Hi1822 16G FC光纤卡驱动安装全攻略(CentOS7.6实测避坑指南)
华为Hi1822 16G FC光纤卡驱动安装全攻略(CentOS7.6实测避坑指南) 在数据中心运维领域,存储网络设备的驱动安装往往是系统部署中最容易踩坑的环节之一。作为华为旗舰级光纤通道卡,Hi1822 16G FC在性能与稳定性上表现优异࿰…...
Windows内核驱动手动映射终极指南:KDMapper完全攻略
Windows内核驱动手动映射终极指南:KDMapper完全攻略 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper 还…...
Axure中文界面终极解决方案:5分钟实现设计工具完全本地化
Axure中文界面终极解决方案:5分钟实现设计工具完全本地化 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axur…...
Vue项目静默打印踩坑实录:electron-hiprint客户端安装与token配置避坑指南
Vue静默打印实战:electron-hiprint客户端部署与安全配置全解析 当我们需要在Vue项目中实现静默打印功能时,electron-hiprint与vue-plugin-hiprint的组合方案成为了许多开发者的首选。然而,从安装到配置的每一步都可能隐藏着各种"坑&quo…...
ML307R编译环境搭建:从官方文档到实战避坑指南
1. 为什么需要这份实战指南? 第一次接触ML307R开发板时,我按照官方文档搭建编译环境,结果花了整整两天时间才搞定。官方文档虽然简洁,但很多关键细节都没提到,比如Python版本选择、环境变量配置、依赖库安装等。这些问…...
Amlogic S9xxx Armbian开源项目:让旧电视盒子重获新生的全能解决方案
Amlogic S9xxx Armbian开源项目:让旧电视盒子重获新生的全能解决方案 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s…...
WSL2中部署Pixel Script Temple:解决Linux环境配置与依赖安装难题
WSL2中部署Pixel Script Temple:解决Linux环境配置与依赖安装难题 1. 前言:为什么选择WSL2? 对于习惯Windows开发环境的用户来说,直接部署基于Linux的工具常常会遇到各种兼容性问题。Pixel Script Temple作为一款依赖特定Linux库…...
