当前位置: 首页 > article >正文

Python操作neo4j库py2neo使用之创建和查询(二)

Python操作neo4j库py2neo使用之创建和查询(二)

py2neo 创建操作

1、连接数据库

from py2neo import Graph
graph = Graph("bolt://100.100.20.55:7687", auth=(user, pwd), name='neo4j')

2、创建Node

from py2neo import Node, Subgraph
# 创建单个节点
node = Node(label='公司',name='XX公司',创始人='XXX')
graph.node.create(node) 
data = {
    "name": "XX公司",
    "创始人": "XX"
}
node = Node(label='公司', **data)
graph.node.create(node) 
# 创建多个节点
node1 = Node("Person", name="司马师", age=18)
node2 = Node("Person", name="司马懿", age=18)
node3 = Node("Person", name="司马昭", age=18)
nodes = Subgraph([node1, node2, node3])
self.graph.create(new_nodes)
# 批量创建节点, 注意只能创建同一label的节点
from py2neo.bulk import create_nodes 
# 关键字参数
data = [
   {"name": "司马师", "age": 18},
   {"name": "司马懿", "age": 18},
   {"name": "司马昭", "age": 18, "职位": "大司马"}
]
create_nodes(graph.auto(), data, labels=("Person"))
 
# 位置参数
data = [
   {"司马师", 18},
   {"司马懿", 18},
   {"司马昭", 18}
]
 
create_nodes(graph.auto(), data, labels=("Person"), keys=["name", "age"])
 
# 合并节点  根据name合并
node1 = Node("Person", name="司马师", age=18)
 
graph.merge(node1, label='Person', "name")
 
# 批量合并节点  根据name合并
from py2neo.bulk import merge_nodes
 
data = [
   {"name": "司马师", "age": 18},
   {"name": "司马懿", "age": 18},
   {"name": "司马昭", "age": 18}
]
merge_nodes(graph.auto(), data, labels=("Person", "name"))
 
data = [
   {"司马师", 18},
   {"司马懿", 18},
   {"司马昭", 18}
]
 
merge_nodes(graph.auto(), data, labels=("Person"), keys=["name", "age"])

py2neo 查询操作

1、连接数据库

from py2neo import Graph
graph = Graph("bolt://xx.xx.xx.xx:7687", auth=(user, pwd), name='neo4j')

2、查询节点

# 获取label为公司的单个节点
node = graph.nodes.match(label='公司').first()
 
# 获取label为公司的所有节点
nodes = graph.nodes.match(label='公司').all()
 
# 获取label为公司的10节点
nodes = graph.nodes.match(label='公司').limit(10)
 
# 获取label为公司的10-20的节点
nodes = graph.nodes.match(label='公司').skip(10).limit(10)
 
# 获取label为公司,属性name为''单个节点
node = graph.nodes.match(label='公司', name='XX公司').first()

3、查询关系

# 根据id获取关系
relationship = graph.relationships.get(1)
 
# 获取关系为投资的单个关系
relationship = graph.match_one(r_type='投资')
relationship = graph.relationships.match(r_type='投资').first()
 
# 获取关系为投资的所有关系
relationship = graph.relationships.match(r_type='投资').all()
 
# 获取关系为投资的10关系
relationships = graph.match(r_type='投资', limit=10)
 
# 获取关系为投资的10-20关系
relationship = graph.relationships.match(r_type='投资').skip(10).limit(10)
 
 
# 获取节点为XX公司,关系为投资的第一个节点
node = graph.nodes.match(lable='公司', name='XX公司').first()
relationship = graph.relationships.match(node=node, r_type='投资').first()

4、查询高级方法

from py2neo import IS_NULL, IS_NOT_NULL, EQ, NE, LT, LE, GT, GE, STARTS_WIH, ENDS_WITH, CONTAINS, LIKE, IN, AND, OR, XOR
 
# IS_NULL
# 获取label为公司的,名称为NULL的节点
 
 
# IS_NOT_NULL
 
# EQ
 
# NE
 
# LT
 
# LE
 
# GT
 
# GE
 
# STARTS_WIH
 
# ENDS_WITH
 
# CONTAINS
 
# LIKE
 
# IN
# 获取label为公司的,名称叫XX公司、aaa公司的公司
nodes = graph.nodes.match(label='公司', name = IN('XX公司', 'aaa公司')).all()
 
# AND
 
# OR
 
# XOR
 
# where
1

http://www.kler.cn/a/405965.html

相关文章:

  • RocketMQ文件刷盘机制深度解析与Java模拟实现
  • 基于Java Springboot付费自习室管理系统
  • Android 14.0 kenel中修改rom系统内部存储的大小
  • ESP8266 STA模式TCP客户端 电脑手机网络调试助手
  • H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
  • 算法编程题-排序
  • ubuntu pytorch容器内安装gpu版本的ffmpeg
  • android studio无法下载,Could not GET xxx, Received status code 400
  • C++设计模式介绍
  • Bug:引入Feign后触发了2次、4次ContextRefreshedEvent
  • IDEA 下载源码很慢,Download Source使用阿里云镜像仓库
  • 算法编程题-排序
  • 什么是Web3D?有何优势?有哪些应用场景?
  • javascrip页面交互
  • 基于 MONAI 的 3D 图像分割任务1(数据增强可视化)
  • STL容器之priority_queue的常用功能和操作
  • 初识Linux · 信号处理 · 续
  • 区块链安全常见的攻击——不安全的 Delegatecall 漏洞(Unsafe Delegatecall Vulnerability)【3】
  • 类和对象( 中 【补充】)
  • 关于xftp7 的中文乱码问题
  • C语言执行Lua进行错误处理
  • FPGA 14 ,硬件开发板分类详解,FPGA开发板与普通开发板烧录的区别
  • 优化 Spring Boot 性能
  • ubuntu22.04 android studio老卡
  • 滚珠导轨在极端温度下性能如何?
  • redis6.0之后的多线程版本的问题