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学习记录的更多相关文章

  1. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  2. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

随机推荐

  1. 简单快速安装Apache+PHP+MySql服务环境(二)—— centos使用yum安装php5.6

    使用默认方式yum install php安装的php版本为5.4,在使用某些PHP框架的时候可能会有问题,所以需要安装高版本的PHP. 通过yum list php*查看是否有自己需要安装的版本,如 ...

  2. canvas的globalCompositeOperation属性

    在开发过程中遇到过类似刮刮卡的效果,就是涂抹时变透明,显示出下方的内容,做法思路简单说一下问题和解决方案: 分为2层,最下面一层是内容,比如'一等奖',上面一层用一个canvas遮挡住,画布本来是透明 ...

  3. div 模拟alert弹出框

    --------------信息展示弹出框---------------- <style> .over{background-color: rgba(0, 0, 0, 0.7);displ ...

  4. Android技术分享| 实现视频连麦直播

    视频连麦产品端核心步骤分析 游客申请连麦/取消申请 主播同意/拒绝申请 音视频发布取消 支持很多观众观看 支持多人连麦 低延时 IM 弹幕 视频连麦技术端调研 emmm,大致可以分为视频采集.编码,传 ...

  5. C/C++入门

    C:面向过程-函数 C++:面向对象-类:向下兼容C 程序包含头文件+主函数 简单数据类型 long long型赋超过int型范围的初值,需要在初值后面加上LL,否则可能会编译错误 不要使用float ...

  6. MVC从客户端中检测到有潜在危险的Request.Form值的解决方法

    1.ASPX页面 在页面头部的page中加入ValidateRequest="false" 2.web.config中配置validateRequest="false&q ...

  7. JAVA数组的基础入门>从零开始学java系列

    目录 JAVA数组的基础入门 什么是数组,什么情况下使用数组 数组的创建方式 获取数组的数据 数组的内存模型 为什么数组查询修改快,而增删慢? 查询快的原因 增删慢的原因 数组的两种遍历方式以及区别 ...

  8. 腾讯云分布式数据库TDSQL在银行传统核心系统中的应用实践

    本文是腾讯云TDSQL首席架构师张文在腾讯云Techo开发者大会现场的演讲实录,演讲主题是<TDSQL在银行传统核心系统中的应用实践>. 我是TDSQL架构师张文,同时也是TDSQL的开发 ...

  9. synchronized优化手段:锁膨胀、锁消除、锁粗化和自适应自旋锁...

    synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前所未有的提升,上一篇中我们谈到了锁膨胀对 synchronized 性能的提升,然 ...

  10. 利用支付宝Cookie监听交易订单实现个人支付宝收款实时回调通知

    在网上.社区里搜了一下好像没找到什么文章详细分享这种方式的,这些天我花了些时间研究整理了一下,发现这种方式能实时获取到支付宝里的二维码收款记录,从而很好地实现个人支付宝免签约收款实时回调,于是在这里分 ...