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://xiahunao.cn/news/2815633.html

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

相关文章

python脚本实现全景站点矩阵转欧拉角

效果 脚本 import re import numpy as np import math import csv from settings import * # 以下是一个示例代码,可以输入3*3旋转矩阵,然后输出旋转角度:# ,输入3*3旋转矩阵# 计算x,y,z旋转角def rotation_matrix_to_euler_angles(R):

使用uniapp开发时自定义tabbar

预览图: 一、配置page.jsong中的tabbar(这一步是必须的,因为我们在使用uni.switchTab()时必须要用到) "tabBar": {"list": [{"pagePath": "pages/index/index","iconPath": &…

CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字

CI/CD笔记.Gitlab系列 gitlab-ci.yml中的头部关键字 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136342897HuaW…

Arduino ESP32下载太慢终极解决办法

打开百度网盘下载你需要的软件包到Arduino15\staging\packages目录下,重新在包管理器中安装即可。 链接:https://pan.baidu.com/s/1LKPKuLxkw9xgCrPxTF6alQ?pwdckms 提取码:ckms 失效请留言 附文件列表: xtensa-esp32-elf-gcc…

Lodop关联内容分页打印

文章目录 前言一、打印项关联二、table内嵌条形码总结 前言 Lodop打印插件使用系列,本文交流下比较常用的需求。在打印的页面里面有2个或多个table,它们的高度不固定。这种情况也要实现分页。大概2个方向的思路,思路1自行计算高度&#xff0…

强化学习Agent系列(二)——PyGame虚拟环境创建与Python 贪吃蛇Agent制作实战教学

文章目录 一、前言二、gymnasium 简单虚拟环境创建1、gymnasium介绍2、gymnasium 贪吃蛇简单示例 三、基于gymnasium创建的虚拟环境训练贪吃蛇Agent1、虚拟环境2、虚拟环境注册3、训练程序4、模型测试 三、卷积虚拟环境1、卷积神经网络虚拟环境2、训练代码 一、前言 大家好&am…

【MySQL】主从同步原理、分库分表

主从同步原理 1. 主从同步原理 MySQL 经常先把命令拷入硬盘的日志,再执行日志的命令,这样的好处: 日志的位置固定,拷入硬盘的开销不大;将命令先准备好,而不是边读边执行,性能更好,…

GIS之深度学习01:检测电脑是否包含英伟达GPU

GPU(Graphics processing unit),中文全称图形处理器,我们听说的更多的CPU全称是central processing unit,中央处理器。研究深度学习和神经网络大都离不开GPU,在GPU的加持下,我们可以更快的获得模…

Golang使用Swag搭建api文档

1. 简介 Gin是Golang目前最为常用的Web框架之一。 公司项目验收需要API接口设计说明书(Golang后端服务基于Gin框架编写),编写任务自然就落到了我们研发人员身上。 项目经理提供了文档模板,让我们参考模板来手动编写,要…

幻兽帕鲁(1.5.0)可视化管理工具(0.5.7 docker版)安装教程

文章目录 局域网帕鲁服务器部署教程帕鲁服务可视化工具安装配置服务器地址(可跳过)使用工具管理面板 1.5.0服务端RCON错误1.5.0服务端无法启动RCON端口 解决方法第一步:PalWorldSettings.ini配置第二步:修改PalServer.sh配置 局域…

如何一步一步地优化LVGL的丝滑度

经过一番周折将LVGL移植到了STM32F407单片机上,底层驱动的LCD是st7789,移植时的条件和环境如下: ●LVGL用的是单缓冲,一次刷新10行; ●刷新函数用的是最原始的一个一个打点的方式; ●ST7789底层发送数据用的…

抖音橱窗怎么关闭?

路径:【抖音APP-我-电商带货-全部工具-账号管理-权限与账户-关闭电商权限】关闭橱窗带货权限。 0保、原0粉达人关闭电商权限后,后续均需要满足页面提示要求才可以进行电商权限的开通,建议慎重操作。

2024年阿里云优惠券领取及使用教程_无门槛优惠券

阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法: 阿里云优惠券…

Xinstall助力社交产品,轻松实现用户关系链归因

在如今的社交网络时代,人与人之间的联系变得越来越紧密。社交产品作为连接人与人之间的桥梁,其重要性不言而喻。然而,如何让用户在使用社交产品时更快速地建立起社交联系,一直是社交产品开发者们关注的焦点。 Xinstall作为一款专…

智能销售数据大屏:决胜市场的数字利器

在数字化浪潮席卷全球的今天,数据已经成为企业决策的核心要素。尤其对于销售团队来说,如何快速、准确地把握市场动态,分析客户行为,成为决定胜负的关键。而智能销售数据大屏,正是这样一款能够帮助企业洞察市场脉络、决…

如何用GPT高效地处理文本、文献查阅、PPT编辑、编程、绘图和论文写作?

原文链接:如何用GPT高效地处理文本、文献查阅、PPT编辑、编程、绘图和论文写作?https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247594986&idx4&sn970f9ba75998f2dd9fa5707d1611a6cc&chksmfa82320dcdf5bb1bdf58c20686d4eb209770e68253ed90d…

StarRocks实战——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入,介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容,这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

高通 AI Hub 上手指南

文章介绍 2月26日,高通在2024年世界移动通信大会(MWC2024)上发布高通AI Hub, AI Hub 简化了AI 模型部署到边缘设备的过程。可以利用AI-hub云端托管 Qualcomm 设备上,在几分钟内完成模型的优化、验证和部署。本文以Pyto…

老卫带你学---leetcode刷题(103. 二叉树的锯齿形层序遍历)

103. 二叉树的锯齿形层序遍历 问题 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输入&a…

优先级队列介绍和模拟实现

个人主页:Lei宝啊 愿所有美好如期而遇 Container就是适配器,也就是说这个优先级队列的底层就使用vector,当然,我们也可以使用deque来适配,但是对于优先级队列来说,效率是低于vector的,因为优先…