如何将Python节点字典导入neo4j?

问题描述:

我在for循环中产生下列节点和关系数据约100万次。这个想法是,investor节点连接到company节点通过relationship边缘:如何将Python节点字典导入neo4j?

investor = {'name': owner['name'], 
      'CIK': owner['CIK']} 

relationship = {'isDirector': owner['isDirector'], 
       'isOfficer': owner['isOfficer'], 
       'isOther': owner['isOther'], 
       'isTenPercentOwner': owner['isTenPercentOwner'], 
       'title': owner['title']} 

company = {'Name': json['issuerName'], 
      'SIC': json['issuerSIC'], 
      'Ticker Symbol': json['issuerTradingSymbol'], 
      'CIK': json['issuerCIK'], 
      'EIN': json['issuerEIN']} 

如何完成以下代码来获取类型的字典以上为Neo4j的社区版本?

from py2neo import Graph, authenticate 

authenticate("localhost:7474", "neo4j", "neo") 
graph = Graph() 

for json in long_list_of_dicts: 
    investor = {...} 
    company = {...} 
    relationship = {...} 

    # Code to import investor, company, relationship data into neo4j 

在py2neo一个节点在如下定义:

class Node(*labels, **properties)

node每个具有label,并且可以具有许多properties。在这种情况下,投资者节点可以通过设置标签投资者和节点的属性为名称CIK来定义。

investor_node = Node('investor', name = owner['name'], CIK = owner['CIK']) 

类似地,公司节点将如下所示:

company_node = Node('company', name = json['issuerName'], SIC = json['issuerSIC']) 

关系以下述方式定义:

class Relationship(start_node, type, end_node, **properties)

在这种情况下关系可使用定义:

investor_company_relationship = Relationship(investor_node, "is_director", company_node) 

您可以找到neo4j图here的一个示例实现。

您可以使用UNWIND子句。 UNWIND document.list_of_some_property

:像

WITH {json} AS document 
UNWIND document AS company 
MERGE (c:company {c_id:company.id}) 
SET c.sic=company.issuerSIC 

的东西,如果你的一些JSON的项目又是列表,你可以随意使用放松的好很多