我对py2neo很新,所以我想我会从一个简单的程序开始。它返回一个TypeError:Index是不可迭代的。无论如何,我正在尝试添加一组节点,然后为它们创建关系,同时避免重复。不知道我做错了什么。
from py2neo import neo4j, cypher
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
happy = "happy"
glad = "glad"
mad = "mad"
irate = "irate"
love = "love"
wordindex = graph_db.get_or_create_index(neo4j.Node, "word")
for node in wordindex:
wordindex.add("word", node["word"], node)
def createnodes(a, b, c, d, e):
nodes = wordindex.get_or_create(
{"word": (a)},
{"word": (b)},
{"word": (c)},
{"word": (d)},
{"word": (e)},
)
def createrel(a, b, c, d, e):
rels = wordindex.get_or_create(
((a), "is", (b)),
((c), "is", (d)),
((e), "is", (a)),
)
createnodes(happy, glad, mad, irate, love)
createrel(happy, glad, mad, irate, love)
答案 0 :(得分:2)
您在这里使用了许多方法,从Index.add
方法开始。应该使用此方法将现有节点添加到索引中,但此时代码中没有实际创建节点。我认为您想要使用Index.get_or_create
,如下所示:
nodes = []
for word in [happy, glad, mad, irate, love]:
# get or create an entry in wordindex and append it to the `nodes` list
nodes.append(wordindex.get_or_create("word", word, {"word": word}))
这基本上会替换您的createnodes
函数,因为节点是通过索引直接创建的,保持唯一性。
然后,您可以使用上面的代码获得的节点对象以及GraphDatabaseService.get_or_create_relationships
方法唯一地创建您的关系,如下所示:
graph_db.get_or_create_relationships(
(nodes[0], "is", nodes[1]),
(nodes[2], "is", nodes[3]),
(nodes[4], "is", nodes[0]),
)
希望这有帮助
佰