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