用Python连接Neo4j实现增删改查

用Python连接Neo4j实现增删改查

一、 Neo4j简介

图数据库也称为图形数据库管理系统或GDBMS。图数据库的基本含义是以“图”这种数据结构存储和查询数据,而不是存储图片的数据库。它的数据模型主要是以**节点和关系(边)**来体现,也可处理键值对。
Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下,而不是严格、静态的表中。但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。

二、安装py2neo模块

在用python连接neo4j之前,需要安装py2neo模块,安装之前一定要将翻墙软件关闭,否则会出现错误,这个错误困扰我好几天,没想到因为这个原因,一直安装不上。具体的py2neo模块导入步骤如下:

  1. 点击file-setting进入设置界面。
  2. 在python解释器中点击加号搜索py2neo,注意对勾打上,之后点击导入即可,如下图所示:
    在这里插入图片描述

三、连接Neo4j

在连接neo4j的时候需要neo4j的账户名和密码,如果忘记了可以通过下面的办法找回来:打开dbms文件夹,找到auth文件并删除,重新启动neo4j,此时使用浏览器访问neo4j就可以使用默认的用户名密码登录,之后再修改自己的账号密码,修改之后之前导入的节点都在。
在这里插入图片描述
下面开始正式的导入:

# 连接Neo4j数据库输入地址、用户名、密码
url = 'bolt://localhost:7687'
key = 'birthday_name'
usr = 'neo4j'
graph = Graph(url,auth = (usr,key))
matcher = NodeMatcher(graph) #创建关系需要用到

连接完成之后我们开始创建新节点,看是否真连接上了neo4j。

四、增删改查

4.1 增

1. 增加结点

语法:

节点编号=Node('节点标签名称',name='节点名称' )  # 左边标签,右边是节点
a = Node('owl_Class', name = 'banana') # 创建一个label = 'owl_Class',属性name值为'banana',此时节点并没有真的传到Neo4j
graph.create(a) # 将节点a创建到数据库

创建新节点在neo4j中的显示如下:
在这里插入图片描述

2. 增加关系

先创建好所需要的节点,如下:

# 1.创建结点
a = Node('owl_Class', name = 'banana') # 创建一个label = 'owl_Class',属性name值为'banana',此时节点并没有真的传到Neo4j
b = Node('owl_Class', name = 'apple')
c = Node('ns1_Mammal',name = 'monkey')
graph.create(a) # 将节点a创建到数据库
graph.create(b) # 将节点b创建到数据库
graph.create(c) # 将节点b创建到数据库

再创建关系,这里我们创建“eat”这个关系属性,猴子吃香蕉这个关系,代码如下:

# 2.创建关系(已有节点)
cRelation = matcher.match('ns1_Mammal',name = 'monkey').first()
aRelation = matcher.match('owl_Class',name = 'banana').first()
a_eat_c = Relationship(c,'eat',a)
graph.create(a_eat_c) # 将创建传递到图上

结果如下:
在这里插入图片描述

3.增加属性

之前我们创建的节点只有名字,下面我们给他们增加属性和属性值。代码如下:(代码是依据前面我们创建结点的前提下的)

from py2neo import Graph, Node, Relationship
from py2neo.matching import *
url = 'bolt://localhost:7687'
key = '19981017hlt'
usr = 'neo4j'
graph = Graph(url, auth=(usr, key))
matcher = NodeMatcher(graph)  # 创建节点匹配器

node=matcher.match('owl_Class').where(name = 'pig').first() # 评估匹配并返回匹配的第一个节点
node.setdefault('age',default='30')
# setdefault() 如果此节点具有的属性age,则返回其值。如果没有,添加‘age’属性和对应的属性值'30'
node['number']='002'    #添加“number”属性对应的属性值为“002”
print('node:')
print(node) #打印节点信息
graph.push(node)    #将更改或者添加的放到图中

运行结果:可以看到添加了属性age和number。
在这里插入图片描述
打印结果

D:\ruanJian\python.exe D:/ruanJian/Project/ZCGC.py
node:
(_176:owl_Class {age: '30', name: 'pig', number: '002'})

4.2 删

1. 删除全部结点

graph.delete_all()
print('您已经删除成功!')

2.根据名字删除一个结点

node=matcher.match('owl_Class').where(name = 'pig').first() #先匹配,叫pig的第一个结点
graph.delete(a)  #a代表前面已经定义的结点

删除之前我们可以看到有9个结点,
在这里插入图片描述
删除之后就8个了。
在这里插入图片描述

3. 删除一个标签

a.remove_label('owl_Class2') #括号里面的是节点名称

4.3 改

1.改变属性

node=matcher.match('owl_Class').where(name = 'pig').first() # 评估匹配并返回匹配的第一个节点
node.setdefault('sex',default='male')
# setdefault() 如果此节点具有的属性age,则返回其值。如果没有,添加‘age’属性和对应的属性值'30'
node['number']='001'    #添加“number”属性对应的属性值为“002”
node['age']='10'
node['home']='AnHui'
print('node:')
print(node) #打印节点信息
graph.push(node)    #将更改或者添加的放到图中

注意:setdefault只能用name,用id就会报错。
这里我们改变了age,number等,并加了home,sex等属性。
在这里插入图片描述

2. 改变和查同步

node = Node('ns1_Mamal', name = 'pig')
graph.create(node)
node_id = node.identity
print('修改之前:',node)
print('id号是:',node_id)
create_node = matcher[node_id]
node['name']='cat'
print('修改之后:', node)

运行结果:

D:\ruanJian\python.exe D:/ruanJian/Project/ZCGC.py
修改之前: (_158:ns1_Mamal {name: 'pig'})
id号是: 158
修改之后: (_158:ns1_Mamal {name: 'cat'})

在这里插入图片描述
由此可见:改属性直接这样node[‘属性名字’]=‘属性值’

4.4 查

1. 查找节点id/根据id查找节点

用 node.identity 获取节点的 id ,用节点匹配器根据id查找节点。代码如下:

# 第一步:先创建一个结点
node = Node('ns1_Mamal', name = 'pig')
graph.create(node)
print(node)
# 第二步:获取节点的id
node_id = node.identity
print(node_id)
# 第三步:根据id查找节点
create_node = matcher[node_id]
print(create_node)

运行结果:

D:\ruanJian\python.exe D:/ruanJian/Project/main.py
(_174:ns1_Mamal {name: 'pig'})
174
(_174:ns1_Mamal {name: 'pig'})

Process finished with exit code 0

Neo4j里面的运行结果:
在这里插入图片描述
如果我们要删除该节点直接在第三步后面接着写下面这段代码即可。如下:

# 第四步:删除节点
graph.delete(create_node)
print('删除该节点成功!')

运行结果:

D:\ruanJian\python.exe D:/ruanJian/Project/main.py
(_147:ns1_Mamal {name: 'pig'})
147
(_147:ns1_Mamal {name: 'pig'})
删除该节点成功!

问题

如何在自己导入的项目中增删改查?

node=matcher.match('ns1__Mamal').where(name = 'Tiger').first()
graph.delete(node)
node=matcher.match(ns1__Mammal).where(name = 'Tiger').first()
graph.delete(node) 

报错什么原因

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微莱羽墨

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值