通过python操作neo4j

在neo4j中创建结点和关系

创建结点

创建电影结点

例如:创建一个Movie结点,这个结点上带有三个属性{title:‘The Matrix’, released:1999, tagline:‘Welcome to the Real World’}

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})

创建人物结点

例如:创建一个Person节点,结点带有两个属性:{name:‘Keanu Reeves’, born:1964}。

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})

创建关系

创建人物之间的关系的语句使用了箭头运算符。例如:(Keanu)-[:ACTED_IN {roles:[‘Neo’]}]->(TheMatrix)语句表示创建一个演员参演电影的关系,演员Keanu以角色Neo参演ACTED_IN了电影TheMatrix。

创建人物之间的关系

CREATE(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),(LillyW)-[:DIRECTED]->(TheMatrix),(LanaW)-[:DIRECTED]->(TheMatrix),(JoelS)-[:PRODUCED]->(TheMatrix)

使用python语言操作neo4j数据库

对于python开发者来说,Py2neo库可以完成对neo4j的操作。
首先安装Py2neo,建立数据库连接。Py2neo使用pip安装:

pip install py2neo

连接数据库

建立连接代码示例:定义movie_db为待使用的neo4j连接[默认的账号密码均为“neo4j”,若已修改则为新的,我的密码已修改为“12345678”]

# Graph("http://127.0.0.1:7474",auth=("账号","密码"))
import py2neo
Movie_db=Graph("http://localhost:7474",auth=("neo4j","12345678"))

后续添加结点时可能会报错,== Cannot decode response content as JSON ==
此时只需要将连接语句修改为:即指定连接数据库name=‘neo4j’

Movie_db=Graph("http://localhost:7474",auth=("neo4j","12345678"),name='neo4j')

建立结点、关系

建立结点时候要定义结点的标签和一些基本属性。

Node:节点

基本语法:

node_1=Node(*labels,**properties)
Movie_db.create(node_1)

注意:代码中,test_graph.create(node_1)的作用是将本地创建的node放入数据库中,后面关系、路径等,在本地创建以后,均需要create。

node_1 = Node('英雄',name = '张无忌')
node_2 = Node('英雄',name = '杨逍',武力值='100')
node_3 = Node('派别',name = '明教')# 存入图数据库
test_graph.create(node_1)
test_graph.create(node_2)
test_graph.create(node_3)
print(node_1)

Relationship:关系

基本语法:

Relationship((start_node, type, end_node, **properties)

例如建立两个测试的结点:

test_node_1 = Node(label = "person",name="test_node_1")# 头实体
test_node_2 = Node(label = "movie",name ="test_node_2")# 尾实体
#Movie_db.create(test_node_2)#建立尾结点# 关系
relation = Relationship(test_node_1, "DIRECTED", test_node_2)
# 创建关系(连带创建节点)
Movie_db.create(relation)

表示创建两个结点关系为test_node_1导演了,test_node_2。需要注意的是,如果建立关系的时候起始结点不存在,则建立关系的同时会建立这个结点。

Path:路径

基本语法:

Path(*entities)

注意entities是实体(关系,节点都可以作为实体)。
例如

from py2neo import Path
# 建一个路径:比如按照该路径查询,或者遍历的结果保存为路径
node_4,node_5,node_6 = Node(name='阿大'),Node(name='阿二'),Node(name='阿三')
path_1 = Path(node_4,'小弟',node_5,Relationship(node_6, "小弟", node_5),node_6)
Movie_db.create(path_1)print(path_1)

在这里插入图片描述

* Subgraph:子图

子图是节点和关系的任意集合,它也是 Node、Relationship 和 Path 的基类。
基本语法:

Subgraph(nodes, relationships)

空子图表示为None,使用bool()可以测试是否为空。参数要按数组输入,如下面代码。

# 创建一个子图,并通过子图的方式更新数据库
node_1 = Node('英雄',name = '张无忌')
node_7 = Node('英雄',name = '张翠山')
node_8 = Node('英雄',name = '殷素素')
node_9 = Node('英雄',name = '狮王')relationship7 = Relationship(node_1,'生父',node_7)
relationship8 = Relationship(node_1,'生母',node_8)
relationship9 = Relationship(node_1,'义父',node_9)
subgraph_1 = Subgraph(nodes = [node_7,node_8,node_9],relationships = [relationship7,relationship8,relationship9])
Movie_db.create(subgraph_1)

删除结点

删除数据库中所有节点和关系:

Movie_db.delete_all()

其他删除方法如下(删除的基础是查询,但凡查询条件没错,就不会删错):

# 删除所有:谨慎使用
# Movie_db.delete_all()# 按照节点id删除:要删除某个节点之前,需要先删除关系。否则会报错:ClientError
Movie_db.run('match (r) where id(r) = 3 delete r')
# 按照name属性删除:先增加一个单独的节点:
node_x = Node('英雄',name ='韦一笑')
Movie_db.create(node_x)
Movie_db.run('match (n:英雄{name:\'韦一笑\'}) delete n')# 删除一个节点及与之相连的关系
Movie_db.run('match (n:英雄{name:\'韦一笑\'}) detach delete n')
# 删除某一类型的关系
Movie_db.run('match ()-[r:喜欢]->() delete r;')# 删除子图
# delete(self, subgraph)

修改结点

改的基础也是查询,查到就可以改,因此本文的重点放在查询上,下面示例简单修改。

# 改
# 将狮王的武力值改为100
node_9['武力值']=100
# 本地修改完,要push到服务器上哦
Movie_db.push(node_9)

查询结点

Movie_db的nodes属性包含图当中的所有节点信息,请查考下面代码:

for node in Movie_db.nodes:print(node)

也可以使用match方法来找到相应节点,请参考以下代码:

n=Movie_db.nodes.match("Person")
for i in n:print(i)

在这里插入图片描述

当然也可以进行更为细致的匹配,请参考以下代码

n=Movie_db.nodes.match("Person",name='Keanu Reeves')
for i in n:print(i)

NodeMatcher

NodeMatcher:定位满足特定条件的节点。
基本语法:

 NodeMatcher(graph).match(*labels, **properties)

结合不同的方法可以取得不同的效果。主要方法表如下所示:

方法名功能
first()返回查询结果第一个Node,没有则返回空
all()返回所有节点
where(condition,properties)对查询结果二次过滤
order_by排序
# 定义查询
nodes = NodeMatcher(Movie_db)# 单个节点,按照label和name查询
## 查询节点:狮王
node_single = nodes.match("英雄", name="狮王").first()
print('单节点查询:\n',node_single )## 按照label查询所有节点
node_hero = nodes.match("英雄").all()
print('查询结果的数据类型:',type(node_hero))# 在查询结果中循环取值,用first()取出第一个值
i = 0
for node in node_hero:print('label查询第{}个为:{}'.format(i,node))i+=1## 按照name查询所有节点:用all()取出所有值
node_name = nodes.match(name='张无忌').all()
print('name查询结果:',node_name)# get()方法按照id查询节点
node_id = nodes.get(1)
print('id查询结果:',node_id)

在这里插入图片描述

NodeMatch

NodeMatch:基本用法,

 NodeMatch(graph, labels=frozenset({}), predicates=(), order_by=(), skip=None, limit=None)

可以看出,NodeMatch的参数和NodeMatcher的参数完全不同。后面是可以加很多条件的,包含的主要方法如下表:

方法作用
iter(match)遍历所匹配节点
len(match)返回匹配到的节点个数
all()返回所有节点
count()返回节点计数,评估所选择的节点
limit(amount)、 返回节点的最大个数
order_by(*fields)按指定的字段或字段表达式排序。要引用字段或字段表达式中的当前节点,请使用下划线字符
where(*predicates, **properties)二次过滤
from py2neo import NodeMatch
nodess = NodeMatch(Movie_db,labels=frozenset({'英雄'}))
# 遍历查询到的节点
print('='*15,'遍历所有节点','='*15)
for node in iter(nodess):print(node)
# 查询结果计数
print('='*15,'查询结果计数','='*15)
print(nodess.count())
# 按照武力值排序查询结果:注意引用字段的方式,前面要加下划线和点:_.武力值
print('='*10,'按照武力值排序查询结果','='*10)
wu = nodess.order_by('_.武力值')
for i in wu:print(i)

RelationshipMatcher

RelationshipMatcher:用于选择满足一组特定标准的关系的匹配器。
基础语法:

relation = RelationshipMatcher(Movie_db)
from py2neo import RelationshipMatcher
# 查询某条关系
relation = RelationshipMatcher(Movie_db)# None表示any node哦!不是表示空
print('='*10,'hate关系查询结果','='*10)
x = relation.match(nodes=None, r_type='hate')
for x_ in x:print(x_)
# 增加俩关系
re1_1 = Relationship(node_101,'情敌',node_102)
re1_2 = Relationship(node_102,'情敌',node_103)
test_graph.create(re1_1)
test_graph.create(re1_2)
# 情敌查询结果
print('='*10,'hate关系查询结果','='*10)
x = relation.match(nodes=None, r_type='情敌')
for x_ in x:print(x_)

RelationshipMatch

基本语法:

RelationshipMatch(graph, nodes=None, r_type=None, predicates=(), order_by=(), skip=None, limit=None)

可以按照NodeMatch理解

参考
https://zhuanlan.zhihu.com/p/437824721

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

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

相关文章

Python Django 之模板继承详解(extends)

文章目录 1 概述1.1 目的1.2 标签:block、extends1.3 目录结构 2 templates 目录2.1 base.html:父页面2.2 login.html:子页面 3 其它代码3.1 settings.py3.2 views.py3.3 urls.py 1 概述 1.1 目的 模板继承 和 类继承 的目的是一样的&#…

【P2P owt】owt-client-native-p2p-e2e-test vs2017构建7:依赖库及路径

依赖库 G:\CDN\LiveServiceMesh\cdnsignal\third_party\libeva\thirdparty\janbar-openssl\out32\ssl\Debug\libssl-

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中,我们解释了文本预处理的重要性,并解释了一些文本预处理技术。在本文中,我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术,用于将单词还原为其基本形式或词根形式。这些技术的…

SpringBoot集成与应用Neo4j

文章目录 前言集成使用定义实体配置定义Repository查询方法方式一:Query方式二:Cypher语法构建器方式三:Example条件构建器方式四:DSL语法 自定义方法自定义接口继承自定义接口实现自定义接口neo4jTemplateNeo4jClient 自定义抽象…

企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误

🧸欢迎来到dream_ready的博客,📜相信你对这两篇博客也感兴趣o (ˉ▽ˉ;) 📜 表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学 📜 用户登录前后端…

【计算机网络笔记】传输层——可靠数据传输原理之Rdt协议

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

基于深度学习的人脸表情识别 计算机竞赛

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

视频汇聚平台EasyCVR分发的流如何进行token鉴权?具体步骤是什么?

视频监控EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视…

智安网络|保护您的应用程序免受攻击:重要的安全强化措施

在今天的数字化时代,应用程序安全成为了企业和个人必须重视的重要领域。应用程序普遍存在的安全漏洞成为黑客们进行攻击的一个突破口。为了保护敏感数据和个人隐私,我们必须了解并实施一系列的关键措施来加固应用程序的安全性。 首先,一个关…

SSM培训报名管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 培训报名管理系统是一套完善的信息系统,结合SSM框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主 要采用B/S模式开…

Mac docker+vscode

mac 使用docker vs code 通过vscode 可以使用docker容器的环境。 可以在容器安装gdb, 直接调试代码。 创建容易时候可以指定目录和容易目录可以共享文件。

十年回望 -- JAVA

十年 十年时间,弹指一挥,好像一直都是在为工作奔波,匆匆忙忙的十年。 一、个人介绍 本人毕业于一所很普通的公办专科院校(全日制统招大专),专业是软件技术,当初能进入计算机这一行业&#xff0…

数字孪生与智慧城市:开启未来智慧生活

在数字时代的浪潮中,数字孪生技术和智慧城市的理念相互交织,共同塑造了一个更智能、更可持续、更宜居的未来。数字孪生是一项前沿技术,将虚拟世界与现实世界相融合,为城市管理者和市民带来了前所未有的机遇和便捷。 数字孪生模型是…

FreeRTOS深入教程(空闲任务和Tick中断深入分析)

文章目录 前言一、空闲任务源码分析二、Tick中断深入分析总结 前言 本篇文章主要带大家深入分析空闲任务和Tick中断的作用。 一、空闲任务源码分析 在启动调度器时会创建出空闲任务: /* 启动调度器 */ vTaskStartScheduler();在空闲任务中会调用到prvCheckTasks…

Unity地面交互效果——2、动态法线贴图实现轨迹效果

Unity引擎动态法线贴图制作球滚动轨迹 大家好,我是阿赵。   之前说了一个使用局部UV采样来实现轨迹的方法。这一篇在之前的基础上,使用法线贴图进行凹凸轨迹的绘制。 一、实现的目标 先来回顾一下,上一篇最终我们已经绘制了一个轨迹的贴图…

ASCB1系列智能微型断路器在科技馆中的应用-安科瑞黄安南

【摘要】:安科瑞电气厂家直供黄安南1876-15//06-237,ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品,产品由智能微型断路器与智能网关两部分组成,可用于对用电线路的关键电气因素,如电压、电…

数据交易是什么?国内的数据交易有哪些?

目录 数据交易是什么?国内的数据交易有哪些? 数据交易的概念 国内数据交易发展历程 数据交易主体 国内数据交易市场面临的问题 如何解决: 明确交易标准,推动交易市场,制定规则,完善数据监管机制&…

coturn服务器的搭建

Window下搭建coturn服务器: 准备材料: 1、安装Cygwin,地址:https://cygwin.com/install.html 由于Window无法直接部署coturn,因此需要下载安装Cygwin在Window上部署Linux虚拟环境。 在安装的时候需要安装几下packe…