【技术笔记】Python调用neo4j接口实现数据操作

Neo4J 入门实践 - 安装、Cypher操作、Python调用Neo4j、数据导入 一、Neo4J 介绍与安装 1.1 引言 “工欲善其事,必先利其器”,知识图谱作为一种特殊的图结构,自然需要专门的图数据库进行存储。 知识图谱由于其数据包含实体、属性、关系等,常见的关系型数据库诸如MySQL之类不能很好的体现数据的这些特点,因此知识图谱数据的存储一般是采用图数据库(Graph Databases)。而Neo4j是其中最为常见的图数据库。 1.2 Neo4J 下载 首先在 Neo4J官网 下载 Neo4J Server。 Neo4J分为社区版和企业版: 企业版:收费,在横向扩展、权限控制 阅读详情

在知识图谱工作处理中,难免会接触到图数据库,而neo4j在这个领域排名领先的厂商,因此在这里整理一些自己在工作中常见的数据处理函数。此处主要针对Python开发语言的同仁们。欢迎copy。

1. 写入数据

直接代码奉上:

import json
from neo4j import GraphDatabase

def add_symptom_info(tx, symptom_info):
    """
    description: 添加症状数据
    :param tx: 事务
    :param symptom_info: 症状信息字典结构为{ "症状名": {"features":["aaa", "bbb"], "degrees":["ccc"], "triggers":[], "frequencies":[]}}
    :return:
    """
    for symptom_name, object_dict in symptom_info.items():
        # 分别获取症状属性
        features = object_dict.get("features") if object_dict.get("features") else []
        degrees = object_dict.get("degrees") if object_dict.get("degrees") else []
        triggers = object_dict.get("triggers") if object_dict.get("triggers") else []
        frequencies = object_dict.get("frequencies") if object_dict.get("frequencies") else []
        tx.run("MERGE (s:Symptom {name: $name, "
               "features: $features, "
               "degrees: $degrees, "
               "triggers: $triggers, "
               "frequencies: $frequencies}) ",
               name=symptom_name,
               features=features,
               degrees=degrees,
               triggers=triggers,
               frequencies=frequencies)


def add_disease_info(tx, disease_info):
    """
    description: 增加疾病信息
    :param tx: 事务
    :param disease_info: 疾病信息
    """
    disease_name = disease_info.get("name")
    genetic = disease_info.get("genetic")
    infectivity = disease_info.get("infectivity")
    # 获取当前疾病对应症状
    symptoms = disease_info.get("symptoms")
    # 疾病发病部位
    part_list = disease_info.get("part")
    # 插入疾病数据
    tx.run("MERGE (a:Disease {name: $name, "
               "genetic: $genetic, "
               "cost: $cost, "
               "infectivity: $infectivity})",
           name=disease_name,
           genetic=genetic,
           infectivity=infectivity)
           
    # 更新式插入发病部位并建立关系
    for part in part_list:
        part = part.strip()
        tx.run("MATCH (d:Disease {name: $disease_name}) "
               "MERGE (a:Part {name: $name}) "
               "MERGE (a)<-[:发病部位]-(d)",
               name=part,
               disease_name=disease_name)
               
    # 查询症状并建立关联
    for symptom in symptoms:
        symptom = symptom.strip()
        tx.run("MATCH (d:Disease {name: $disease_name}) "
               "MATCH (s:Symptom {name: $name}) "
               "MERGE (s)-[:病症]-(d)",
               name=symptom,
               disease_name=disease_name)



def import_data_to_kg():
    """
    description: 导入数据至知识图谱
    """
    driver = GraphDatabase.driver("bolt://localhost:7687", auth=("username", "password"))
    with driver.session() as session:
    	# 增加症状信息
        symptom_info_dict = json.load(open("symptom_info_list_dict.json"))
        session.write_transaction(add_symptom_info, symptom_info_dict)
        
		# 增加疾病信息
        for disease_info in json.load(open("disease_info_list.json")):
            session.write_transaction(add_disease_info, disease_info)

2. 查询数据

同样直接上代码:

import json
from neo4j import GraphDatabase

def load_disease_list(tx):
    """
    description: 加载疾病信息
    :param tx:
    """
    disease_info_list = []
    for record in tx.run("MATCH (d:Disease) RETURN d ORDER BY d.name"):
        disease_info = record["d"]
        # 疾病名称
        disease_name = disease_info.get("name")
        # 疾病别名
        disease_alias = disease_info.get("alias")
        # 发病部位
        part = disease_info.get("part")
        # 多发人群
        crowd = disease_info.get("crowd")
        # 治疗方案
        therapies = disease_info.get("therapies")
        # 是否具有传染性
        infectivity = disease_info.get("infectivity")
        # 是否遗传
        genetic = disease_info.get("genetic")
        disease_dict = {
            "name": disease_name,
            "genetic": genetic,
            "therapies": therapies,
            "crowd": crowd,
            "part": part,
            "alias": disease_alias,
            "infectivity": infectivity
        }
        disease_info_list.append(disease_dict)
    # 输出数据至json文件中
    json.dump(disease_info_list,
              open("disease_info_list.json", mode="w", encoding="utf8"),
              ensure_ascii=False,
              indent=4)



def load_node_data():
    """
    description: 获取知识图谱节点数据
    """
    driver = GraphDatabase.driver("bolt://localhost:7687", auth=("username", "password"))
    with driver.session() as session:
        # 获取疾病信息
        session.read_transaction(load_disease_list)

参考

neo4j学习笔记(三)——python接口-创建删除结点和关系 neo4j学习笔记(一) neo4j学习笔记(二)——python接口-查询 neo4j学习笔记(三)——python接口-创建删除结点和关系 先查询再创建的可能就我一个罢 基本概念 Node 一个节点类,一个节点就是neo4j那个图形界面上的一个球球。 Relationship 关系类,一个关系就是界面上两个球球间的一条线。 还是这张图。看看球球就是结点,球球有属性,只是... 阅读详情

相关推荐

neo4j学习笔记(二)——python接口-查询

我按照我要用的轻重缓急来记录我要用的方法,查询优先。 2019-9-18 neo4j学习笔记(一) neo4j学习笔记(二)——python接口-查询 neo4j学习笔记(三)——python接口-创建删除结点和关系 pip安装 python的连接主要使用py2neo库 先pip: pip install py2neo python的使用 import from py2n...

兰兰的博客 8970

neo4j / cypher:悬挂查询参数

一直以来,我一直在使用neo4j的密码查询语言, 迈克尔一直在告诉我在查询中使用参数,但是查询的性能始终可以接受,因此我没有必要。 但是,最近我正在研究一个数据集,并使用类似于以下的代码创建了约500个节点: require 'open-uri' open("data/people.cyp", 'w') { |f| (1..500).each do |value| f.put...

最佳 Java 编程 718

neo4j python_Neo4j安装+Python操作Neo4j

一、Neo4j安装及服务启动Neo4j 是目前最流行的图形数据库,支持完整的事务,图形数据库也就意味着它的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以有一个或多个属性。1、Neo4j安装2、启动配置Neo4j应用程序有如下主要的目录结...

weixin_39710396的博客 2918

py2neo使用python操作neo4j

首先安装py2neo库 pip install py2neo 连接数据库 g=Graph("bolt://localhost:7687",auth=("neo4j","123456")) 创建几个节点 Alice=Node('Chinese',name='Alice') Bob=Node('Chinese',name='Bob') Cindy=Node('Chinese',name='Cindy') Doge=Node('Chinese',name='Doge') g.create(Alice) g.

Keep up and carry on. 1914

【Python】 Neo4j

在深入探讨如何使用Python与Neo4j进行交互之前,我们必须首先从最底层、最根本的角度理解为什么需要图数据库,以及它解决了哪些传统数据模型难以应对的问题。这不仅是技术选择的考量,更是思维模式的转变。关系型数据库(Relational Databases, RDBs)以其严谨的表结构、事务(ACID)特性以及强大的SQL查询语言,在过去的几十年里一直是数据存储和管理的主流。然而,当数据模型中的实体关系变得复杂且层级加深时,关系型数据库固有的设计范式便开始显现其局限性,尤其是在处理“关系”本身时。关系型数据

宅男很神经 1813

图形数据库Neo4j之Python API使用示例

最近研究图形数据库 Neo4j。参考网上的文档,编写了使用 python API 接口实现的接口库:neo4jUtil.py。另外还写一个查询脚本:querySQL.py。 使用方法: 需要安装 neo4j for python 的库: pip install neo4j 修改配置文件:neo4jCfg.py 测试接口: python neo4jUtil.py 执行查询: python querySQL.py -i ./query.sql 测试环境信息: Neo4j Version: 3.5.13 Python Vsersion: 2.7.5 neo4j for python version: 1.7.6

Neo4j的使用与Java调用实例

一. Neo4j简介:Neo4j是一个高性能的,NoSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享...

Royi的博客 4万+

配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~

本文介绍了在Ubuntu 22.04系统下为NVIDIA RTX 50系显卡搭建深度学习环境的完整流程。重点包括:1)安装适配50系显卡(sm_120架构)的CUDA 12.9驱动和Toolkit,需注意禁用系统自带驱动;2)配置环境变量解决nvcc命令识别问题;3)通过源码编译方式安装支持sm_120的PyTorch nightly版本(cu129),解决官方二进制包不兼容问题。整个过程涉及显卡驱动安装、CUDA环境配置、PyTorch适配等关键步骤,并提供了详细的验证方法和常见问题解决方案。文中特别强调

qq_36674060的博客 6160

neo4j 图数据库:Cypher 查询语言、医学知识图谱

需要注意的是,如果该节点还有任何关系,直接删除会失败,因为图数据库要求任何存在的关系都必须有明确的起点和终点。这些查询覆盖了从最基本的节点检索到更具体的带有条件和关系的检索,适合不同的查询需求。在图数据库中,关系可以是有向的,箭头显示了从一个节点指向另一个节点的路径。标签通常用来分类或标识不同的节点,而关系的类型用来描述节点之间的连接方式。这将返回路径中的所有节点和关系,使得你能够获取更多关于路径的具体细节。在实际使用时,根据图的大小和复杂性,你可能需要考虑查询的效率和性能。

Debroon 2087

四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

移位寄存器有哪些分类呢? 按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器 按循环方式分类:①循环移位寄存器②非循环移位寄存器 按部位的不同分类:①逻辑移位寄存器②算术移位寄存器 按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出

Loudrs的博客 1万+

微纳加工技术中的自对准硅化物(Silicide)工艺:关键步骤与应用场景解析

本文深入解析了微纳加工技术中的自对准硅化物(Silicide)工艺,详细介绍了其关键步骤与应用场景。从表面清洁、金属沉积到两步退火法,全面拆解工艺全流程,并探讨了不同技术节点下的工艺演进。文章还提供了实际应用中的问题排查方法和新兴技术对Silicide工艺的挑战,为芯片制造领域的工程师提供了实用参考。

weixin_30613727的博客 430

实现Neo4j图数据库查询的Python示例

在本文中,我们将探讨如何使用Python调用中转API对Neo4j图数据库执行Cypher查询。这个过程将涉及到构建Cypher查询,发送请求,并处理返回的结果。首先,我们需要准备一个Cypher查询。我们可以根据需要查询的问题来构建这个查询。接下来,我们要编写Python代码,通过中转API发送这个查询请求,并处理返回的结果。

ppoojjj的博客 718

F280049C_HRPWM_死区时间高精度控制与MEP技术实战解析

本文深入解析了F280049C的HRPWM模块及其基于MEP技术的死区时间高精度控制。通过实测数据与TI官方代码对比,详细阐述了DBREDHR和DBFEDHR寄存器的配置技巧、精度优化方法及常见问题调试,为电源管理和电机控制应用提供了实用的实战指南。

yolo5detector的博客 217

实现Python将csv数据导入到Neo4j

关于CSV数据集《我是刑警》导入到Neo4j中,形成知识图谱,本文详细描述过程,实现Python与Neo4j的连接,增进交互,实现知识图谱。

小星袁 6193

基于Simulink的电机驱动逆变器仿真

本文完成了电机驱动逆变器的Simulink多层级仿真平台搭建,实现了:✅ 构建了从理想到器件级的逆变器模型体系✅ 实现了Si/SiC损耗精确计算与结温预测✅ 建模了母线寄生参数、死区效应、栅极驱动等关键非理想特性✅ 支持故障注入与保护策略验证✅ 集成了热管理、EMI、寿命预测与碳足迹评估。

amy_mhd的博客 87

网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)

目录 ICMP隧道 使用ICMP搭建隧道(PingTunnel) 使用ICMP搭建隧道(Icmptunnel) ICMP隧道 ICMP隧道简单实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相...

谢公子的博客 6696

neo4j基本使用及其Python语言操作

文章目录 一、Neo4j的安装与启动 二、Neo4j在Pycharm中的调用 三、Neo4j指令介绍 四、Neo4j在Pycharm下的指令 五、Neo4j简介及应用场景 六、Neo4j与Python交互 1、环境与调用问题 2、版本问题 3、修改结点以及删除结点 七、结点构建方法 1、Python直接去重构建 2、运用查询语句构建 3、使用Neo4j Desktop导入csv文件构建 一、Neo4j的安装与启动 1、环境配置:JKD 11.0.12 (neo4j最新.

qq_39753433的博客 2万+

DNA图谱分析:自动分析DNA图谱中的变异YOLOv5、YOLOv8、YOLOv10

YOLO(You Only Look Once)是一种基于卷积神经网络(CNN)的目标检测模型,因其高效的检测速度和优异的精度而广泛应用于计算机视觉任务。一次性检测:与传统的目标检测方法不同,YOLO通过回归方法同时预测多个边界框和类别信息,从而实现高效的目标检测。高精度与高速度:YOLO在检测精度和速度之间找到了平衡,适用于实时目标检测任务。

YOLO 733

用Python连接Neo4j实现增删改查

用Python连接Neo4j实现增删改查 目录用Python连接Neo4j实现增删改查一、 Neo4j简介二、安装py2neo模块三、连接Neo4j 一、 Neo4j简介 图数据库也称为图形数据库管理系统或GDBMS。图数据库的基本含义是以“图”这种数据结构存储和查询数据,而不是存储图片的数据库。它的数据模型主要是以**节点和关系(边)**来体现,也可处理键值对。 Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持

qq_43654669的博客 6267

学Simulink——基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计仿真

本文介绍了一种基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计方法,通过Simulink建模实现。文章首先阐述了EKF在估计电机转子温度中的优势,即利用易测量信号(如电流、电压、转速)在线估计难以直接测量的转子温度,并分析了温升对电机性能的影响。随后详细讲解了电机热电增广模型的构建,包括定子电阻温度关系、一阶热近似模型和PMSM的dq轴方程。接着,文章提供了Simulink建模的详细步骤,包括PMSM+FOC电流环的搭建、EKF算法的实现(推荐使用ExtendedKalmanFilter块或MAT

xiaoheshang_123的博客 56

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

neo4j python接口

Python,数据库相关视频讲解:python的or运算赋值用法用python编程Excel有没有用处?011_编程到底好玩在哪?查看python文件_输出py文件_cat_运行python文件_shel使用Python与Neo4j数据库进行交互 在当今数据驱动的世界中,图数据库成为了越来越流行的数据存储方式。而Ne...

weixin_34333047的博客 321

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python中使用Neo4j

Python中使用Neo4j 前提条件 熟悉图数据库概念以及属性图模型 已安装Neo4j,熟悉Cypher查询语言 熟悉Python的pip和virtualenv1 安装Neo4j 1、Neo4j简介 Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一

5916

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python操作之Neo4j

Python操作之Neo4j(一)目录连接Neo4j图数据库首先下载py2neo第三方包忘记neo4j密码连接neo4j增加节点和关系删除节点和关系查找节点和关系 目录 连接Neo4j图数据库 首先下载py2neo第三方包 pip install py2neo 忘记neo4j密码 打开neo4j安装目录的dbms文件夹,找到auth文件并删除,重新启动neo4j,此时使用浏览器访问neo4j就可以使用默认的用户名密码登录,之后再修改自己的账号密码。 重启neo4j数据库可以打开服务,找到neo4j g

lyq8778的博客 1万+

Neo4j安装部署及python连接neo4j操作

neo4j安装部署及python连接neo4j操作

weixin_43456810的博客 3073

python关联图谱3 之 Neo4j学习笔记+实例附代码

前言 继前面的两篇文章 ”python关联图谱1 之 networkx官网学习笔记+实例附代码”,链接:https://blog.youkuaiyun.com/weixin_42575233/article/details/118785528 ”python关联图谱2 之 graphviz官网学习笔记+实例附代码”,链接:https://blog.youkuaiyun.com/weixin_42575233/article/details/118937854 本篇为第三篇,在关联图的效果上更进一步,有了动态的效果。由于..

Jcodes的博客 3242

Python操作Neo4j第一天——Python成功连接Neo4j

Python操作Neo4j第一天 环境准备: (1)neo4j安装并启动,浏览器打开neo4j界面:localhost:7474/browser/ ; (2)python环境配置好,我用的是Pycharm 完整代码如下: from py2neo import Graph,Node, Relationship test_graph = Graph( "http://localhost:747...

weixin_43439235的博客 7127
上一篇: 【技术笔记】neo4j 数据导入导出
下一篇: 【技术笔记】给neo4j节点加索引
黑符石
博客等级 码龄10年 489粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑符石

感谢小主对原创的大力支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值