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

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

py2neo 创建操作

1、连接数据库

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

2、创建Node

python 复制代码
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、连接数据库

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

2、查询节点

python 复制代码
# 获取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、查询关系

python 复制代码
# 根据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、查询高级方法

python 复制代码
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
相关推荐
数据智能老司机1 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 小时前
drf初步梳理
python·django
每日AI新事件1 小时前
python的异步函数
python
Raymond运维1 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉2 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
这里有鱼汤2 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook11 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室12 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python