py2neo.database.status.CypherSyntaxError:未定义变量

时间:2017-05-26 06:33:11

标签: python neo4j py2neo

我正在尝试使用py2neo包将数据从python导出到neo4j db。 我有一个包含数字内容的dataframe'ranked_conts',它是字符串及其相应的浮点数。
我的代码是

findnode = list(graph.find('rank',property_key='type',property_value='TrendingRank'))

if len(findnode) > 0:
    print("already exist")
else:
    for i in range(len(ranked_conts)):
        conts = ranked_conts.iloc[i]['content_id']
        rank = ranked_conts.iloc[i]['rank']
        graph.run("MERGE(c:Content{contentId:"+str(conts)+"})-[hr: HAS_RANK{r:"+str(rank)+"}]->(rank:Rank {type: 'TrendingRank'})")

但是当我执行它时,我收到一条错误消息,如py2neo.database.status.CypherSyntaxError:未定义变量EROS_6272897

1 个答案:

答案 0 :(得分:0)

您希望使用参数而不是为每个i in range创建新查询。类似的东西:

findnode =list(graph.find('rank',property_key='type',property_value='TrendingRank'))

if len(findnode) > 0:
    print("already exist")
else:
    for i in range(len(ranked_conts)):
        conts = ranked_conts.iloc[i]['content_id']
        rank = ranked_conts.iloc[i]['rank']
    graph.run("MERGE (c:Content{contentId:{cId}})-[hr: HAS_RANK{r:{rankValue}}]->(rank:Rank {type: 'TrendingRank'})",cId = str(conts),rankValue = str(rank))

这样可以加快查询速度,并且可以更轻松地检查语法错误。还有一点需要注意,您可能需要分别合并:Content:Rank,然后将MERGE关系合并到它上面。像这样。

MERGE (c:Content{contentId:{cId}})
MERGE (rank:Rank {type: 'TrendingRank'})
MERGE (c)-[hr: HAS_RANK{r:{rank}}]->(rank)