py2neo学习记录
py2neo
通用
# -*- coding: UTF-8 -*-
from py2neo import Graph, Node, Relationship, walk, NodeMatcher, RelationshipMatcher, Subgraph
graph = Graph("http://localhost:7474", username="neo4j", password="123456")
增
# 建立节点
node1 = Node('Person' , name = 'Bob')
node2 = Node('Person' , name = 'Alice')
graph.create(node1)
graph.create(node2)
# 建立关系
r1 = Relationship(node2 , 'know' , node1)
graph.create(r1)
# 设置节点属性
node1['age'] = 21
node1['height'] = 180
graph.push(node1)
data = {
'age':24,
'height':177
}
node2.update(data)
graph.push(node2)
# 设置关系属性
r1['level'] = 'familiar'
graph.push(r1)
查
- 查节点
# 查找标签为Person,属性name="Alice"的节点,并返回第一个结果
graph.nodes.match("Person", name="Alice").first()
# 查找所有标签为Person,name以B开头的节点,并将结果按照age字段排序
res = graph.nodes.match("Person").where("_.name =~ 'B.*'").order_by('_.age')
# 查找id为4的节点
t_node = graph.nodes[4]
graph.evaluate()执行一个Cypher语句并返回结果的第一条数据
# 执行Cypher语句并返回结果集的第一条数据
res = graph.evaluate('MATCH (p:Person) return p')
# 输出:(_3:Person {age: 20, name: 'Bob'})
print(res)
- 查关系
graph.match(nodes=None, r_type=None, limit=None)查找符合条件的关系,第一个参数为节点集合或者集合(起始节点,终止节点),如果省略代表所有节点。第二个参数为关系的属性,第三个为返回结果的数量。也可以使用match_one()代替,返回一条结果。
# 查找id为196的关系
rel = graph.relationships[196]
# 查找所有以a为起点,并且属性为know的关系
res = graph.match((a, ), r_type="know")
# 打印关系的终止节点,即为a所有认识的人
for rel in res:
print(rel.end_node["name"])
- 查子图
graph.run()执行Cypher语句并返回结果数据流的游标Cursor,通过forward()方法不断向前移动游标可以向前切换结果集的每条记录Record对象.
# 查询(p1)-[k]->(p2),并返回所有节点和关系
gql="MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
cursor=graph.run(gql)
# 循环向前移动游标
while cursor.forward():
# 获取并打印当前的结果集
record=cursor.current
print(record)
# 还可以将graph.run()返回的结果通过data()方法转化为字典列表,所有结果整体上是一个列表,其中每一条结果是字典的格式
# 查询(p1)-[k]->(p2),并返回所有节点和关系
gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
res = graph.run(gql).data()
print(res)
# 通过graph.run().to_subgraph()方法将返回的结果转化为SubGraph对象,接着按之前操作SubGraph对象的方法取得节点对象
# 查询(p1)-[k]->(p2),并返回所有节点和关系
gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
sub_graph = graph.run(gql).to_subgraph()
# 获取子图中所有节点对象并打印
nodes=sub_graph.nodes
for node in nodes:
print(node)
- 通过属性值来查找节点和关系(find,find_one)
node1 = graph.find_one(
label="Person",
property_key="name",
property_value="Bob"
)
print(node1['name'])
- 补充
# 查
data1 = test_graph.run('MATCH (a:人) RETURN a') # 返回的是cursor对象
data1 = data1.data() # 返回的是list
print(data1, type(data1))
# 查节点
print(pd.DataFrame(test_graph.nodes.match('人')))
print(pd.DataFrame(test_graph.nodes.match('人', name='莎莎')))
# 查关系
print(list(test_graph.match(r_type='喜欢')))
# py2neo提供了专门的查询模块 NodeMatcher节点 RelationshipMatcher关系
# ================== 测试NodeMatcher
nodeMatcher = NodeMatcher(test_graph)
node = nodeMatcher.match('人')
print(pd.DataFrame(list(node)))
# 返回列表的第一个节点
node = nodeMatcher.match('人').first()
print(node)
# 返回列表中age为21的节点
node = nodeMatcher.match('人').where(age=21)
print(list(node))
————————————————
版权声明:本文为CSDN博主「luer9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40046426/article/details/112837659
删
# 删除节点
node3 = Node('animal' , name = 'cat')
graph.create(node3)
graph.delete(node3)
# 删除子图
gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
sub_graph = graph.run(gql).to_subgraph()
graph.delete(sub_graph)
# 删除所有图
graph.delete_all()
# 删除关系rel
# 查找所有以a为起点,并且属性为know的关系
res = graph.match((a, ), r_type="know")
for rel in res:
graph.separate(rel)
改
先查到指定节点,然后直接修改属性后使用graph.push(node)即可
from py2neo import Graph, NodeMatcher, Subgraph
tx = graph.begin()
# 找到你要找的Nodes
matcher = NodeMatcher(graph)
nodes = matcher.match("User")
# 将返回的“Match”类转成list
new_nodes = list(nodes)
## 添加你要修改的东西
for node in new_nodes:
node['tag'] = node['tag'].split(',')
# 里面是Node的list可以作为Subgraph的参数
sub = Subgraph(nodes=new_nodes)
# 调用push更新
tx.push(sub)
tx.commit()
py2neo学习记录的更多相关文章
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
- UWP学习记录7-设计和UI之控件和模式4
UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...
随机推荐
- 排列组合的实现(js描述)
组合的实现 排列组合描述和公式 犹记得高中数学,组合表示C(m, n),意思为从集合m,选出n个数生成一项,总共有多少个项的可能?组合是无序的,排列是有序的.所以排列的项数量多于组合 排列A(n,m) ...
- mac设置终端命令行别名alias(git、npm)
别名(alias)通常被用作对一串或单个命令的简称.懒人必备!当常用到命令行操作的时候,每次输入一长串命令,不厌其烦,自然想到了用简称代替.这里主要介绍两种mac设置别名alias的方式. mac 设 ...
- [HNOI2008]GT考试 题解
这题比较难搞.考虑设计状态:\(f_{i,j}\) 表示当前考虑到 \(X_i\) 位,且 \(X\) 的后 \(j\) 位刚好与 \(A\) 列匹配时的方案数.最终答案为 \(\sum_{i=0}^ ...
- 理清 UT、UTC、GMT和CST
平时各种时间标准简写绕得不明不白,查一下整理在这里. IAT: International Atomic Time, 原子时.又称国际原子时,是一种通过原子钟得到的时间标准,原子钟是世界上已知最准确的 ...
- linux系统下操作mysql数据库常见命令
一. 备份数据库(如: test): ①可直接进入后台即可.(MySQL的默认目录:/var/lib/mysql ) ②输入命令: [root@obj mysql]# mysqldump -u roo ...
- JS对DOM的操作优化法则
html页面显示过程 解析HTML,并生成一棵DOM tree 解析各种样式并结合DOM tree生成一棵Render tree 对Render tree的各个节点计算布局信息,比如box的位置与尺寸 ...
- 大数据开发-Go-新手常遇问题
真正在工作中用Go的时间不久,所以也作为新手,总结了一些常见的问题和坑 Go 中指针使用注意点 // 1.空指针反向引用不合法 package main func main() { var p *in ...
- 杭电OJ 输入输出练习汇总
主题 Calculate a + b 杭电OJ-1000 Input Each line will contain two integers A and B. Process to end of fi ...
- Map 与 unordered_map 横向与纵向测试,附带原始数据与测试程序
写程序时,面临用Map还是unordered_map,总是很纠结,于是写了个程序进行测试 Map 与 unordered_map 横向与纵向测试,附带原始数据与测试程序 简单数据(4 Byte) 首先 ...
- Axure RP 9 安装
安装好的样子 官方安装包下载地址(速度较慢) 下载Axure RP 9 MAC版:https://axure.cachefly.net/AxureRP-Setup.dmg 下载Axure RP 9 P ...