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.

results matching ""

    No results matching ""