使用py2neo将文本数据插入Neo4j

时间:2013-09-22 13:59:12

标签: python neo4j py2neo

我想使用py2neo将文本文件中的数据插入Neo4j。但是在创建已存在的节点之前,他们是一种检查方式。它是CREATE UNIQUE的任何py2neo方式 例如

创建节点A到B. 创建节点A到C

然后,只能创建单个节点A并连接到B和C

insert_data.py

from pprint import pprint
from py2neo import neo4j,node, rel, cypher
#------------------------------------------------------------------------------ 

f = open('sample_dataset')
lines = f.readlines()
graph_db = neo4j.GraphDatabaseService()
print graph_db.get_reference_node()
try:
    for row in lines:    
        from_node = row.split('\t')[0].strip()
        to_node = row.split('\t')[1].strip()
        graph_db.create(
                        node(name=from_node),
                        node(name=to_node))                               
except Exception as e:
    print e

data.txt中:

101 102
101 104
101 107
101 125
101 165
101 168
101 170
101 176
101 180
101 181
101 182
101 209
101 210
101 248
101 306
101 329
101 330
101 340
101 349
101 352
101 355
101 356
101 359
101 364
101 365
101 368
101 372
101 373
101 383
101 433
101 438
101 439
101 441
101 448
101 466
101 471
101 484
101 526

2 个答案:

答案 0 :(得分:2)

这样做的一种方法是使用CYPHER 2.0和py2neo。 在您的代码中只需替换

graph_db.create

有了这个,查询字符串的开头是CYPHER 2.0,它支持MERGE:

query = neo4j.CypherQuery(graph_db,
        """CYPHER 2.0 
            merge (n {name: {from}})
            merge(m {name: {to}}) 
            create unique (n)-[:relation]->(m)""")
result = query.execute( from = from_node, to = to_no)

使用merge n,只有在数据库中没有n时才会创建n。 希望这会有所帮助。

答案 1 :(得分:1)

有几种方法可以通过py2neo来管理唯一性,并且通过直接的Cypher查询和几种包装器方法都支持CREATE UNIQUE。我最近写了一篇关于这个主题的博客文章,所以你可以从这里得到一些指示:

http://blog.safaribooksonline.com/2013/08/07/managing-uniqueness-with-py2neo/

希望这有帮助。