neo4j 图数据库 py2neo 操作 示例代码

文章目录

    • 摘要
    • 前置
    • NodeMatcher & RelationshipMatcher
      • 创建节点
      • 查询获取节点
      • 节点有则查询,无则创建
      • 创建关系
      • 查询关系
      • 关系有则查询,无则创建
    • Cypher语句
      • 创建节点

摘要

利用py2neo包,实现把excel表里面的数据,插入到neo4j 图数据库中;

  • 创建新(节点或关系)到neo4j图数据库中;
  • 能够获取neo4j 中已有的(节点或关系),不再创建新(节点或关系);

进阶, 敬请期待,案例

前置

安装py2neo: pip install py2neo
安装neo4j软件,请自行安装

NodeMatcher & RelationshipMatcher

代码由 Jupyter 编写,建议使用vscode

from py2neo import Graph, Node, NodeMatcher, RelationshipMatcher
import pandas as pd# 连接到Neo4j数据库  
graph = Graph("bolt://localhost:7687", auth=("neo4j", "你设置的密码")) node_matcher = NodeMatcher(graph)
relationship_matcher = RelationshipMatcher(graph)

在这里插入图片描述

TODO: 设置neo4j 远程连接

创建节点

node = Node("Person", name="Alice", age=18)
graph.create(node)

在这里插入图片描述

查询获取节点

# 拿到匹配到的第一个节点
node_matcher.match('Person', name='Alice').first()# 拿到可匹配到的所有
node_matcher.match('Person', name='Alice').all()

节点有则查询,无则创建

def get_node(class_, **kwargs):if node := node_matcher.match(class_, **kwargs):# 节点存在,则获取return node.first()else:# 节点不存在,则创建node = Node(class_, **kwargs)graph.create(node)return node

在这里插入图片描述

创建关系

Alice - Friend -> Bob

node1 = get_node('Person', name='Alice', age=21)
node2 = get_node('Person', name='Bob', age=20)graph.create(Relationship(node1, 'Friend', node2))

在这里插入图片描述

查询关系

查询 node1 和 node2 之间是否有 Friend 关系

node1 = get_node('Person', name='Alice', age=21)
node2 = get_node('Person', name='Bob', age=20)relationship_matcher.match([node1, node2],r_type='Friend').first()

关系有则查询,无则创建

def get_relation(node1, node2, r_type):if r :=  relationship_matcher.match([node1, node2],r_type=r_type):return r.first()else:r = Relationship(node1, r_type, node2)graph.create(r)return r
# 查询已有关系
get_relation(node1, node2, 'Friend')
# 创建新关系
get_relation(node1, node2, 'Classmate')

在这里插入图片描述

Cypher语句

虽然 在 NodeMatcher & RelationshipMatcher 介绍的接口已经能够满足大部分情况的使用,本文仍想提供一种使用cypher语句的插入数据到neo4j图数据库的思路。

创建节点

graph.run("create (n:Person {name:'js'}) return n"
)
graph.run("MERGE (n:Person {name: $name}) \ON CREATE SET n.created_at = timestamp() \return n",name='Cyder'
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++内存布局

1. C 结构体的内存布局 以一个例子来看struct的内存结构 #define NP_FUNC_WRAPPER __attribute__((optimize(0)))struct StructBody {int first_int_placeholder;int second_int_placeholder;double third_double_placeholder; };class ClassBody {public:int first_int_place…

【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

在「读未提交」和「读已提交」隔离级别下,都只会使用记录锁;而对于「可重复读」隔离级别来说,会使用记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢&#xf…

鸿蒙基础开发实战-(ArkTS)像素转换

像素单位转换API的使用 主要功能包括: 展示了不同像素单位的使用。展示了像素单位转换相关API的使用。 像素单位介绍页面 在像素单位介绍页面,介绍了系统像素单位的概念,并在页面中为Text组件的宽度属性设置不同的像素单位,fp…

IIS 和 WEB 站点文件夹权限配置,一个空间绑定10个域名

首先在 D:根目录新建一个 wwwroot 文件夹,用来做为 WEB 服务器站点的根目录,里面存放不同网站的文件夹。例如新建第一个网站存放文件的目录 WebSite1,为了杜绝跨站攻击等各种相关安全问题,实现各个虚拟主机目录有独立权…

js filter方法的使

JavaScript中的数组filter()方法用于创建一个新的数组,其中包含符合指定条件的所有元素。该方法会遍历数组,并对每个元素应用指定的测试函数。如果测试函数返回true,则该元素将被包含在新数组中。 filter()方法的语法如下: arra…

Iterator迭代器操作集合元素时,不能用集合删除元素

在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法删除元素或者调用add()方法添加元素之后,继续使用迭代器遍历元素,会出现异常(java.util.ConcurrentModificationException)。 import java.util.ArrayList; …

Linux(Centos7)安装 jenkins(jdk11+jenkins2.375),并配置JDK,Maven,Git,GitLab

安装步骤 1. JDK11安装2. Maven安装3. git安装4. Jenkins2.375安装4.1 设置中文显示4.2 端口,用户权限修改4.3 插件下载4.4 全局工具配置4.4.1 Maven配置4.4.2 JDK配置4.4.3 Git配置 4.5 系统配置4.5.1 Gitee配置 4.6 构建测试 1. JDK11安装 #下载 yum -y install fontconfig …

进阶Docker2:数据卷和挂载目录

目录 准备 删除容器 创建并运行一个容器 数据卷(Volumes) 挂载数据卷 虚拟机端口映射 挂载目录(Bind mounts) 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式: - 数据卷&#xff0…

图像处理-像素位置的一阶导数和二阶导数

图像处理-像素位置的一阶导数和二阶导数 空间卷积是一种图像处理中常用的技术,用于计算图像中每个像素位置的一阶导数和二阶导数。在这里将解释如何使用卷积操作来实现这些导数的计算。 一阶导数和二阶导数的性质: 一阶导数通常产生粗边缘&#xff1b…

4.2V锂电线性1.2A充电芯片WT4056

4.2V锂电线性1.2A充电芯片WT4056 WT4056是一款专为单节锂离子电池设计的恒流/恒压线性充电器。其简洁的外部电路设计使其非常适用于便携设备的供电,同时兼容USB电源和适配器电源。该充电器内部采用了防倒充电路,无需额外添加外部隔离二极管。通过热反馈…

Linux(适合开发人员参考)

Linux的概述 先了解Unix Unix是一个强大的多用户、多任务操作系统。于1969年在AT&T的贝尔实验室开发。UNIX的商标权由国际开放标准组织(The Open Group)所拥有。UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版…

Authing 入选中国信通院《 2023 高质量数字化转型产品及服务全景图》

近日,中国信通院“铸基计划”发布了《高质量数字化转型产品及服务全景图( 2023 )》。Authing 身份云成功入选 IT 维护与运营领域并获得证书。 “十四五”时期,我国数字经济转向深化应用、规范发展、普惠共享的新阶段,数字化转型已成为传统企业…

对于软件架构的思考

1.什么是MVVM? MVVM全称是Model View ViewModel,Model即数据模型,View指的是Activity或者Fragment,和MVP架构中的数据层、界面层意义是一样的。这里新增的ViewModel,是用来代替Presenter,和底层业务逻辑交…

论文阅读笔记AI篇 —— Transformer模型理论+实战 (一)

资源地址Attention is all you need.pdf(0积分) - CSDN 第一遍阅读(Abstract Introduction Conclusion) Abstract中强调Transformer摒弃了循环和卷积网络结构,在English-to-German翻译任务中,BLEU得分为28.4, 在En…

Python学习之路-模块和包

Python学习之路-模块和包 模块 简介 模块是 Python 程序架构的一个核心概念。每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块,模块名同样也是一个标识符,需要符合标识符的命名规则。在模块中定义的全局变量、函数、类都是提供给外界直接使用…

Notepad++编译运行C/C++程序

首先需要先下载一个C语言编译器-MinGW(免费的) 官网:http://www.mingw.org/(加载太慢) 我选择MinGW - Minimalist GNU for Windows download | SourceForge.net这个网址下载的 注意安装地址,后续配置环境…

什么是Java泛型?泛型在Java中应用场景

目录 一、什么是Java泛型 二、泛型类 三、泛型接口 四、泛型方法 一、什么是Java泛型 Java泛型是一种在编译时进行类型检查和类型安全的机制。它允许编写能够操作多种类型的代码,而不需要进行类型转换或使用Object类型。通过在定义类、接口或方法时使用泛型参数…

云原生微服务之分布式锁框架 Redisson

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列专栏目录 [Java项目…

数据仓库(3)-模型建设

本文从以下9个内容,介绍数据参考模型建设相关内容。 1、OLTP VS OLAP OLTP:全称OnLine Transaction Processing,中文名联机事务处理系统,主要是执行基本日常的事务处理,比如数据库记录的增删查改,例如mysql、oracle…

java大数据hadoop2.92 Java连接操作

1、要想Java可以连接自己虚拟机的hadoop文件系统&#xff0c;需要给文件系统权限 &#xff08;1&#xff09;需要在/usr/local/hadoop/etc/hadoop/core-site.xml core-site.xml文件配置具体ip <configuration><property><name>fs.defaultFS</name>&…