neo4j数据库导入代码示例 郝伟 2021/03/05 [TOC]
1. 简介
本代码演示了如何将neo4j的节点和查询结果导出,核心要点包括以下几条:
- 如何连接和关闭数据库
- 如何执行CQL语句
- 如何访问返回的统计数据
- 如何访问返回的节点数据
- 如何访问返回的边数据
2. 演示代码
# -*- coding: utf-8 -*-
"""
日期:2021/03/05
作者:郝伟老师
简介:生成指定neo4j连接数据库一些操作演示。
参考:
[1] The session API, https://neo4j.com/docs/driver-manual/current/session-api/
"""
# import random
# from py2neo import Graph,Node,Relationship
from neo4j import GraphDatabase
def show_labels(session):
''' 演示如何获得数据库的所有标签 '''
print(' call db.labels '.center(60, '*'))
cql= 'call db.labels();'
ret=session.run(cql)
for rec in ret:
for item in rec:
print(' ', type(item), item)
def show_nodes(session):
''' 演示如何处理所有的节点 '''
print(' process nodes '.center(60, '*'))
nodes=session.run('Match (n:人) Return n Limit 10')
for node in nodes:
print('*'*60)
for key in node["n"]:
print(key, node["n"][key])
def show_edges(session):
''' 演示如何处理所有的关系 '''
print(' process edges '.center(60, '*'))
edges=session.run('Match p=(n1:人)-[r]-(n2) Return p,n1,r,n2 Limit 10')
for edge in edges:
print('*'*60)
r = edge['r']
for key in r:
print('key =', key)
print('r[key] =', r[key])
print('r.id =', r.id)
for n in r.nodes:
print('\t', n)
# 公司 <Relationship id=4011092 nodes=(<Node id=1432404 labels=frozenset({'员工', '留学生', '硕士', '教师', '人', '丈夫', '博士', '学生', '父亲'}) properties={'name': '郝伟', '生日': '1981/07/13', '结婚纪念日': '12/28', '所在城市': '合肥', '性别': '男'}>, <Node id=1432432 labels=frozenset({'员工', '人'}) properties={'name': '李岩', '所在城市': '北京', '性别': '男'}>) type='同事' properties={'公司': '北京华云安'}>
print('Connecting 121.196.157.14:7687 ...')
driver=GraphDatabase.driver('bolt://121.196.157.14:7687', auth=('neo4j', 'hd7iu2_X@v4u'))
print('Connected')
session=driver.session()
show_labels(session)
show_nodes(session)
show_edges(session)
session.close()
print('closed connection.')
3. 输出结果
Connecting 121.196.157.14:7687 ...
Connected
********************** call db.labels **********************
<class 'str'> Person
<class 'str'> People
<class 'str'> vul
<class 'str'> vulnerability
<class 'str'> software
<class 'str'> addressRange
<class 'str'> address
<class 'str'> flow
<class 'str'> malware
<class 'str'> IP
<class 'str'> port
<class 'str'> DNSName
<class 'str'> Address
<class 'str'> ip
<class 'str'> host
<class 'str'> account
<class 'str'> user
<class 'str'> attack
<class 'str'> attacker
<class 'str'> Worker
<class 'str'> Emploree
<class 'str'> Father
<class 'str'> Husband
<class 'str'> Son
<class 'str'> 人
<class 'str'> 教师
<class 'str'> 员工
<class 'str'> 博士
<class 'str'> 父亲
<class 'str'> 丈夫
<class 'str'> 儿子
<class 'str'> 母亲
<class 'str'> 妻子
<class 'str'> 学生
<class 'str'> 公司
<class 'str'> 科技公司
<class 'str'> 企业
<class 'str'> Boss
<class 'str'> 老板
<class 'str'> 大学
<class 'str'> 单位
<class 'str'> 硕士
<class 'str'> 高校
<class 'str'> 留学生
<class 'str'> 导师
<class 'str'> 教授
<class 'str'> 学校
<class 'str'> 小学
<class 'str'> 高新企业
********************** process nodes ***********************
************************************************************
name 沈传宝
性别 男
************************************************************
name 马维士
所在城市 北京
性别 男
************************************************************
name 郝伟
生日 1981/07/13
结婚纪念日 12/28
所在城市 合肥
性别 男
************************************************************
name 松崎公纪
国籍 西班牙
性别 男
************************************************************
name Onofre Coll Luise
国籍 西班牙
性别 男
************************************************************
name Valade Ganblavesi
国籍 俄罗斯
性别 男
************************************************************
name 郝承志
所在城市 淮南
性别 男
************************************************************
name 李岩
所在城市 北京
性别 男
************************************************************
name 李春艳
结婚纪念日 12/28
所在城市 合肥
性别 女
********************** process edges ***********************
************************************************************
key = 创建
r[key] = 2019
r.id = 4011106
<Node id=1432353 labels=frozenset({'Boss', '员工', '人', '老板'}) properties={'name': '沈传宝', '性别': '男'}>
<Node id=1432412 labels=frozenset({'企业', '单位', '公司', '高新企业', '科技公司'}) properties={'name': '北京华云安信息技术有限公司', '所在城市': '北京'}>
************************************************************
key = 创建
r[key] = 2019-2021
r.id = 4011108
<Node id=1432412 labels=frozenset({'企业', '单位', '公司', '高新企业', '科技公司'}) properties={'name': '北京华云安信息技术有限公司', '所在城市': '北京'}>
<Node id=1432353 labels=frozenset({'Boss', '员工', '人', '老板'}) properties={'name': '沈传宝', '性别': '男'}>
************************************************************
key = 类型
r[key] = 总经理
r.id = 4011109
<Node id=1432353 labels=frozenset({'Boss', '员工', '人', '老板'}) properties={'name': '沈传宝', '性别': '男'}>
<Node id=1432412 labels=frozenset({'企业', '单位', '公司', '高新企业', '科技公司'}) properties={'name': '北京华云安信息技术有限公司', '所在城市': '北京'}>
************************************************************
key = 创建
r[key] = 2019-2021
r.id = 4011107
<Node id=1432353 labels=frozenset({'Boss', '员工', '人', '老板'}) properties={'name': '沈传宝', '性别': '男'}>
<Node id=1432412 labels=frozenset({'企业', '单位', '公司', '高新企业', '科技公司'}) properties={'name': '北京华云安信息技术有限公司', '所在城市': '北京'}>
************************************************************
key = 公司
r[key] = 北京华云安
r.id = 4011090
<Node id=1432404 labels=frozenset({'员工', '留学生', '硕士', '教师', '人', '丈夫', '博士', '学生', '父亲'}) properties={'name': '郝伟', '生日': '1981/07/13', '结婚纪念日': '12/28', '所在城市': '合肥', '性别': '男'}>
<Node id=1432402 labels=frozenset({'员工', '人'}) properties={'name': '马维士', '所在城市': '北京', '性别': '男'}>
************************************************************
key = 公司
r[key] = 北京华云安
r.id = 4011094
<Node id=1432402 labels=frozenset({'员工', '人'}) properties={'name': '马维士', '所在城市': '北京', '性别': '男'}>
<Node id=1432432 labels=frozenset({'员工', '人'}) properties={'name': '李岩', '所在城市': '北京', '性别': '男'}>
************************************************************
key = 公司
r[key] = 北京华云安
r.id = 4011091
<Node id=1432402 labels=frozenset({'员工', '人'}) properties={'name': '马维士', '所在城市': '北京', '性别': '男'}>
<Node id=1432404 labels=frozenset({'员工', '留学生', '硕士', '教师', '人', '丈夫', '博士', '学生', '父亲'}) properties={'name': '郝伟', '生日': '1981/07/13', '结婚纪念日': '12/28', '所在城市': '合肥', '性别': '男'}>
************************************************************
key = 类型
r[key] = 技术总监
r.id = 4011088
<Node id=1432402 labels=frozenset({'员工', '人'}) properties={'name': '马维士', '所在城市': '北京', '性别': '男'}>
<Node id=1432412 labels=frozenset({'企业', '单位', '公司', '高新企业', '科技公司'}) properties={'name': '北京华云安信息技术有限公司', '所在城市': '北京'}>
************************************************************
key = 公司
r[key] = 北京华云安
r.id = 4011095
<Node id=1432432 labels=frozenset({'员工', '人'}) properties={'name': '李岩', '所在城市': '北京', '性别': '男'}>
<Node id=1432402 labels=frozenset({'员工', '人'}) properties={'name': '马维士', '所在城市': '北京', '性别': '男'}>
************************************************************
key = 公司
r[key] = 北京华云安
r.id = 4011092
<Node id=1432404 labels=frozenset({'员工', '留学生', '硕士', '教师', '人', '丈夫', '博士', '学生', '父亲'}) properties={'name': '郝伟', '生日': '1981/07/13', '结婚纪念日': '12/28', '所在城市': '合肥', '性别': '男'}>
<Node id=1432432 labels=frozenset({'员工', '人'}) properties={'name': '李岩', '所在城市': '北京', '性别': '男'}>
closed connection.