springboot+neo4j+d3项目之neo4j基础学习(六)使用py2neo导入数据

springboot+neo4j+d3项目之neo4j基础学习(六)使用py2neo导入数据

在使用Neo4j时一般需要批量导入数据,如果使用Load语句可能会很慢,而且并不知道导入的进程,因此可以使用py2neo进行数据的导入

1、py2neo可以利用python连接Neo4j并进行数据处理,使用pip install py2neo进行安装
2、连接,代码如下,要包括url、数据库名称、密码,而后就可以使用test_graph变量创建、查询、修改等

from py2neo import *

# 连接
test_graph = Graph(
    "http://localhost:7474",
    username="MyGraph",#名称
    password="123456"#密码
)

3、新建节点,在读取文件过程中进行节点的创建,使用Node()声明节点,如下代码中节点标签为Entity,有name、type两个属性,而后利用test_graph.create加入Neo4j。

with codecs.open(entity_path,'r','utf-8') as fentity:
    #读取实体
    lines = fentity.readlines()
    for line in lines:
        info = line.strip().split('\t')
        node_id = int(info[0])
        en_name = info[1].split('.')[0]
        en_type = info[1].split('.')[1]
        # 建立节点
        entity_node = Node("Entity", name=en_name, type=en_type)
        test_graph.create(entity_node)

4、查询节点、新建关系,在读取文件过程中新建关系,首先要查找联系连接的节点,利用matcher = NodeMatcher(test_graph)声明一个test_graph库上的节点查询器,根据matcher.match("Entity", name=en2_name, type=en2_type).first()查询符合条件的第一个节点。使用Relationship(g, "Relation", h, **properties)声明关系,Relation代表关系的标签,properties是关系的一些属性。

with codecs.open(triple_path,'r','utf-8') as ftriple:
    #读取关系
    lines = ftriple.readlines()
    for line in lines:
        info = line.strip().split('\t')
        en1_name = info[0].split('.')[0]
        en1_type = info[0].split('.')[1]
        en2_name = info[2].split('.')[0]
        en2_type = info[2].split('.')[1]
        rela_name = info[1]
        matcher = NodeMatcher(test_graph)
        g = matcher.match("Entity", name=en1_name, type=en1_type).first()
        # print(g)
        h = matcher.match("Entity", name=en2_name, type=en2_type).first()
        # print(h)

        properties = {'name': rela_name,'source':en1_name,'target':en2_name}
        triple = Relationship(g, "Relation", h, **properties)
        test_graph.create(triple)

5、新增、修改相关属性。首先需要查询到相关节点,利用update()更新属性,这里的属性可以是原来节点没有的,最后需要test_graph.push(g)将修改后的节点重新加入库中。

with codecs.open(entity_path,'r','utf-8') as fentity:
    #读取实体
    lines = fentity.readlines()
    for line in lines:
        info = line.strip().split('\t')
        englishName = info[1]
        en_name = info[0].split('.')[1]
        en_type = info[0].split('.')[0]
        # print(en_name,en_type,englishName)
        matcher = NodeMatcher(test_graph)
        g = matcher.match("Entity", name=en_name, type=en_type).first()
        # print(g)
        g.update({'englishName':englishName})
        test_graph.push(g)
        # print(g)

其余的大家可以参考:
https://www.jianshu.com/p/febe8a248582
https://www.jianshu.com/p/da84712ef62b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wavehaha

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值