py2neo.database.status.CypherSyntaxError: Variable not defined

py2neo.database.status.CypherSyntaxError: Variable not defined

我正在尝试使用 py2neo 包将数据从 python 导出到 neo4j 数据库。 我有一个数据框'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 未定义。

您想使用参数而不是为每个 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)