列表元素能否作为Neo4j图节点属性?附代码报错求助
问题分析与解决
首先直接回答你的疑问:完全可以用列表元素作为图节点的属性,你当前的代码思路是对的,问题出在Cypher语句的语法细节上。
你遇到的两个核心错误:
- Cypher属性赋值语法错误:Cypher中定义节点属性时,应该用冒号(
:)而不是等号(=),你误用了类似SQL的赋值方式,这是Cypher语法不允许的。 - 语句未完整闭合:你的
CREATE语句最后缺少了闭合的大括号和括号(})),导致整个语句结构不完整,触发了语法报错。
修正后的完整代码
把createNode那行的Cypher语句修改成正确语法,同时补全闭合符号:
# a list containing a list of recipes and their respective information recipeList = [['Mac and Cheese', 'Anytime', 'Macaroni', 'Terry'], ['Chicken Curry', 'Supper', 'Chicken', 'Anne']] def print_recipes(self,aList): with self._driver.session() as session: recipes = session.write_transaction(self.createRecipeNodes,aList) print(recipes) def createRecipeNodes(tx, aRecipeList): for allRecipes in aRecipeList: recipeName = allRecipes[0] serveTime = allRecipes[1] mainIngrediant = allRecipes[2] givenBy = allRecipes[3] # 修正后的Cypher语句 createNode = tx.run( "CREATE (theNode:Recipe {recipeName: {recipeName}, serveTime: {serveTime}, mainIngrediant: {mainIngrediant}, givenBy: {givenBy}})", recipeName=recipeName, serveTime=serveTime, mainIngrediant=mainIngrediant, givenBy=givenBy )
额外小提示
- 你代码里的
mainIngrediant拼写有小失误,正确拼写是mainIngredient(少了一个'e'),虽然不影响运行,但规范拼写能避免后续维护时的混淆。 - 如果想直观确认节点是否创建成功,可以在
CREATE语句后加上RETURN theNode,这样能返回创建的节点对象,方便调试验证。
内容的提问来源于stack exchange,提问作者TPady
相关产品推荐
相关产品推荐

