通过python操作neo4j

这篇具有很好参考价值的文章主要介绍了通过python操作neo4j。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用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)

通过python操作neo4j,python,neo4j,开发语言

* 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)

通过python操作neo4j,python,neo4j,开发语言

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

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)

通过python操作neo4j,python,neo4j,开发语言

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文章来源地址https://www.toymoban.com/news/detail-715829.html

到了这里,关于通过python操作neo4j的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Neo4j安装与操作

    目录 (一)安装Java JRE (二)下载Neo4j安装文件 1、从Neo4j官网https://neo4j.com/ 2、创建ne04j的环境变量 (三) 启动Neo4j程序 1、通过控制台启动Neo4j程序 2、把Neo4j安装为服务(Windows Services) 3、Neo4j集成的浏览器 4、在Neo4j浏览器中创建节点和关系 Neo4j是基于Java运行环境的图形数

    2024年02月09日
    浏览(48)
  • Neo4j开发

    待补充。。。 参考 Springboot集成Neo4j_喝醉的咕咕鸟的博客-CSDN博客 SpringBoot 整合 Neo4j_springboot neo4j_$懒小猿$的博客-CSDN博客 spring-boot集成neo4j - 知乎 【最新】Neo4j官方建议Spring Boot 2.4.及以上版本用Neo4j Java Driver代替The Spring Boot starter_spring boot_学到一寸是一寸-华为云开发者联盟

    2024年02月16日
    浏览(44)
  • neo4j教程-Cypher操作

    Cypher是图形存储数据库Neo4j的查询语言,Cypher是通过模式匹配Neo4j数据库中的节点和关系,从而对数据库Neo4j中的节点和关系进行一系列的相关操作。 下面,通过一张表来介绍一下常用的Neo4j操作命令及相关说明,具体如表所示。 操作命令 相关说明 CREATE 创建节点、关系 MATC

    2024年02月15日
    浏览(48)
  • Neo4j图数据基本操作

    Neo4j 命令行窗口 neo4j.bat console 导入rdf格式的文件 清空所有数据 这里要注意的是,因为不存在孤立的关系,所以若要删除一个带关系的节点,需要同时删除该节点所有的关系。 即,若要删除路径 (a)-[d]-(b)-[e]-(c) 中的 a,b 节点,则需要同时删除关系 d,e。 因此,若要清空数据

    2024年02月15日
    浏览(39)
  • 【9-1】实验——Neo4j实战操作

    目录 一、Neo4j操作——CQL 1、常用CQL命令 2.常用CQL函数 3.图数据的形式 二、实战代码1.create命令 2. MATCH命令 三、使用neo4j工具导入知识图谱 1、工具:neo4j-admin 2、图谱导入: 3、更新图谱: 1 、常用 CQL 命令 2. 常用 CQL 函数 3. 图数据的 形式 二、实战代码 1.create 命令 2. MATCH 命

    2024年02月21日
    浏览(33)
  • Neo4j中创建关系的常用操作

    Neo4j图数据库遵循属性图模型来存储和管理其数据。 根据属性图模型,关系应该是定向的。 因此,基于方向性,Neo4j关系被分为两种类型: 单向关系 双向关系 在使用Neo4j CQL CREATE命令来创建两个节点时主要分为一下几种场景(适用于Uni和双向关系): 在两个现有节点之间创

    2024年04月23日
    浏览(39)
  • Neo4j图数据库基本操作

    Neo4j 命令行窗口 neo4j.bat console 导入rdf格式的文件 清空所有数据 这里要注意的是,因为不存在孤立的关系,所以若要删除一个带关系的节点,需要同时删除该节点所有的关系。 即,若要删除路径 (a)-[d]-(b)-[e]-(c) 中的 a,b 节点,则需要同时删除关系 d,e。 因此,若要清空数据

    2024年02月12日
    浏览(44)
  • Neo4j在Ubuntu 20.04上安装、配置以及Python连接使用 - Neo4j

    1. 进入要安装neo4j的ubuntu环境。 2. 添加Debian资源库。 java 1.8.xx版本对应neo4j 3.xx版本(jdk 11版本对应neo4j 4.xx版本): (1)wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - (2)echo \\\'deb https://debian.neo4j.com stable 3.5\\\' | sudo tee /etc/apt/sources.list.d/neo4j.list(或者:echo \\\'deb

    2024年02月04日
    浏览(56)
  • neo4j查询语言Cypher详解(三)--函数

    Cypher中的函数如果输入参数为null,则返回null。 以字符串作为输入的函数都对Unicode字符进行操作,而不是对标准字符进行操作。例如,size()函数应用于任何Unicode字符将返回1,即使该字符不适合一个字符的16位。 可以通过 SHOW FUNCTIONS 查看函数定义。 函数签名中参数格式:e

    2024年02月14日
    浏览(46)
  • 图数据库(六):Neo4j中的查询操作

    上一篇文章我们学习了Neo4j中的更新操作,今天我们学习一下Neo4j的查询。 说到查询我们就不得不提到Match 查询所有节点 条件查询 在条件查询的过程中我们经常会使用where来进行过滤,有时候我们还可以使用到With,With可以看成用于向后面的查询传递结果

    2024年02月09日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包