py2neo介绍
    
- 
介绍 
     Py2neo是一个客户端库和工具包,用于从Python应用程序和命令行使用Neo4j(
     
      Neo4j Graph Data Platform | Graph Database Management System
     
     )。该库同时支持 Bolt 和 HTTP,并提供高级 API、OGM、管理工具、交互式控制台、Pygments 的 Cypher 词法分析器以及许多其他功能。
    
- 
安装 
pip install py2neo注:Neo4j也需要安装,地址https://neo4j.com/
     py2neo基本使用
    
- 
启动Neo4j 
- 
连接代码 
from py2neo import Graph, Node, Relationship
 
graph = Graph("http://localhost:7474//browser", name='neo4j', auth=("neo4j", "12345678"))
print(graph.run("show databases"))
     基于xsls文件的demo
    
- 
demo效果 
 
      - 
xls文件内容 
- 
sheet 结构 
 
      - 
“关系”sheet内容如下 
| 
           | 
           | 
           | 
           | 
| 1 | 令狐冲 | 宁中则 | 师娘 | 
| 2 | 仪琳 | 令狐冲 | 倾慕 | 
| 3 | 任盈盈 | 令狐冲 | 爱慕 | 
| 4 | 令狐冲 | 岳林珊 | 小师妹 | 
| 5 | 岳林珊 | 岳不群 | 父亲 | 
| 6 | 任盈盈 | 任我行 | 父亲 | 
| 7 | 岳不群 | 宁中则 | 夫妻 | 
| #8 | 林平之 | 岳林珊 | 夫妻 | 
- 
下面的表格分别对应” 
 
 恒山派
 
 “、”
 
 华山派
 
 “、”
 
 日月教
 
 “sheet中的内容()
| 
           | 
           | 
| 1 | 令狐冲 | 
| 2 | 仪清 | 
| 3 | 仪和 | 
| 4 | 仪琳 | 
| 
 | 
 | 
| 
           | 
           | 
| 1 | 岳不群 | 
| 2 | 宁中则 | 
| 3 | 岳林珊 | 
| 4 | 林平之 | 
| 
           | 
           | 
| 1 | 任我行 | 
| 2 | 任盈盈 | 
| 3 | 向问天 | 
| 
 | 
 | 
- 
demo依赖 
pip install pandas
pip install openpyxlNeo4j和py2neo也是需要的。
- 
demo主要代码块 
import os
import pandas as pd
from py2neo import Graph, Node, Relationship
sheetNameList = [
    {'sheet':'恒山派',     'type':'Node'},
    {'sheet':'华山派',     'type':'Node'},
    {'sheet':'日月教',     'type':'Node'},
    {'sheet':'关系',       'type':'Relationship'},
]def __init__(self, filename=None):
    self.filename = filename
    self.nodeList             = []
    self.relationshipList     = []
    self._loadfile()
    self._buildGraph() def _loadfile(self):
    if not os.path.exists(self.filename):
        print('_loadfile', 'file not exist')
        return False
    for sheetName in sheetNameList:
        sheetData = pd.read_excel(self.filename, index_col=None, comment='#', sheet_name=sheetName['sheet'])
        if sheetName['type'] == 'Node':
            keys=[]
            for index, row in sheetData.iterrows():
                if not row['title']:
                    continue
                keys.append(row['title'])
            
            keyval = dict(zip(keys, keys))
            node = Node(sheetName['sheet'], name=sheetName['sheet'], **keyval)
            self.nodeList.append(node)
            for index, row in sheetData.iterrows():
                if not row['title']:
                    continue
                subNode = Node(sheetName['sheet'], name=row['title'])
                self.nodeList.append(subNode)
                rel = Relationship(node, '属性', subNode)
                self.relationshipList.append(rel)
        elif sheetName['type'] == 'Relationship':
            startNode = None
            endNode   = None
            for index, row in sheetData.iterrows():
                if not row['from'] or not row['to']:
                    continue
                for node in self.nodeList:
                    if node['name'] == row['from']:
                        startNode = node
                    elif node['name'] == row['to']:
                        endNode   = node
                    else:
                        pass
                rel = Relationship(startNode, row['type'], endNode)
                self.relationshipList.append(rel)
        else:
            passdef _buildGraph(self):
    graph = Graph("http://localhost:7474//browser", name='neo4j', auth=("neo4j", "12345678"))
    graph.delete_all()
    for node in self.nodeList:
        graph.create(node)
    for rel in self.relationshipList:
        graph.merge(rel)
        pass
    graph.begin()
     参考
    
 
