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

文章目录

        • 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 NodeMatchernode_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 RelationshipMatcherrelation_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.hqwc.cn/news/496842.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习 day05(异常、模块导入、包)

异常 为什么要捕获异常 当程序遇到了BUG,如果不对BUG进行手动捕获,那么整个程序就会因为一个BUG而停止运行,这在有些情况下是会造成很大的损失,但是如果我们进行了手动捕获,那么整个程序会继续运行捕获异常的作用在于&…

第三百七十二回

文章目录 1. 概念介绍2. 实现方法2.1 maskFilter2.2 shader 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"两种阴影效果"相关的内容,本章回中将介绍如何绘制阴影效果.闲话休提,让我们一起Talk Flutter吧。 1. 概…

分布式存储 ZBS 的 RoCE 技术支持与大数据应用场景性能评测

作者:深耕行业的 SmartX 金融团队 闫海涛 在《解决 SAN 交换机“卡脖子”并升级存储架构?一文解析 RoCE 与相关存储方案趋势》文章中,我们分析了如何利用支持 RoCE 技术的分布式存储,同步实现 IT 基础架构的信创转型与架构升级&a…

Soul App发布春节特产社交报告,全面解析当代年轻人的社交新趋势

近日,社交平台Soul App发布了《2024年春节“特产社交”趋势洞察报告》,深入剖析了年轻用户在春节期间的特产消费新习惯和社交新方式。这份报告基于平台内容和2395份调研样本,重点关注18-34岁用户群体,特别是00后用户,为我们呈现了一系列有趣的趋势。 年轻人的过年选择:看世界,却…

数据结构系列-通讯录项目

🌈个人主页: 会编辑的果子君 💫个人格言:“成为自己未来的主人~” #pragma once#define NAME_MAX 100 #define GENDER_MAX 10 #define TEL_MAX 12 #define ADDR_MAX 100//通讯录数据类型 typedef struct PersonInfo {char name[NAME_MAX];int age;cha…

修改Qt生成iOS应用的原生底层,编译QtBase下的ios子模块

1.下载Qt源码 2.找到ios.pro子工程 3.使用QtCreaor12打开ios.pro工程 4.出现工程下只有一个.pro文件解决 复制修改好的toolchain.prf文件进行替换. 修改方法:

更改elementui的箭头图片以及位置

//更改箭头位置 .el-tree-node__content > .el-tree-node__expand-icon {position: absolute;right: 12px; }//更改箭头图片 .el-tree-node__expand-icon {transform: rotate(-90deg); } .el-tree-node__expand-icon.expanded {transform: rotate(0deg); } // 有子节点 且已…

协议-http协议-基础概念01-发展历程-http组成-http是什么-相关的应用-相关的协议

发展历程-http组成-http是什么-相关的应用-相关的协议 参考来源: 极客时间-透视HTTP协议(作者:罗剑锋); 01-HTTP的发展历程 1989 年,任职于欧洲核子研究中心(CERN)的蒂姆伯纳斯 - 李(Tim Ber…

【C++】类和对象之常引用与运算符重载

个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 常引用3. 运算符重载 1. 前言 在之前的文章中提到了常引用,再来看运算符重载之前,先来看看常引用的使用。 2. 常引用 在使用引用的时候可…

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型: 2、TCP/IP- 各层级网络协议(从下往上): 1)数据链路层: ARP: 地址解析协议,用IP地址获取MAC地址的协议,通过ip的地址获取mac地 …

POST参数里加号+变成空格的问题处理

今天遇到个这样的问题,从前端传到后端的加密报文,里面包含了号,但在后端日志输出看出,变成空格。这个是由于经过RSA加密后引起的 解决办法: 1.前端转码:使用encodeURIComponent对参数进行转码 2.后端解码…

深入理解Lucene:开源全文搜索引擎的核心技术解析

欢迎关注微信公众号:一休哥助手。多种功能等待你的使用。1. 介绍 Lucene是什么? Lucene是一个开源的全文搜索引擎库,提供了强大的文本搜索和检索功能。它由Apache软件基金会维护和开发,采用Java语言编写,因其高性能、…