【问题标题】:How do I import Python node dicts into neo4j?如何将 Python 节点字典导入 neo4j?
【发布时间】:2016-12-27 23:44:03
【问题描述】:

我在 for 循环中生成以下节点和关系数据大约 100 万次。这个想法是investor 节点通过relationship 边连接到company 节点:

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']}

如何完成以下代码,将上面的 dicts 导入 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

【问题讨论】:

    标签: python json neo4j py2neo


    【解决方案1】:

    在 py2neo 中,Node 的定义方式如下:

    class Node(*labels, **properties)

    每个node 都有一个label,并且可以有多个properties。在这种情况下,可以通过设置标签investor和节点的属性为nameCIK来定义Investor节点。

    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 的一个示例实现。

    【讨论】:

      【解决方案2】:

      您可以使用UNWIND 子句。类似的东西

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

      如果您的某些 json 项目再次列出,您可以随意使用 UNWIND:UNWIND document.list_of_some_property

      【讨论】:

        最近更新 更多