【问题标题】:How to pass parameter as property name in py2neo?如何在py2neo中将参数作为属性名称传递?
【发布时间】:2019-04-11 10:50:09
【问题描述】:

将参数作为属性名称传递时出错。通过编写 {param} 将参数作为属性值传递时,我没有收到任何错误。但这在将参数作为属性名称传递的情况下不起作用。

这是我的代码。

query = 'Merge(c1:Customer{user_id: {user_id1},{user_id2}:{cell}})'
g.run(query, user_id1=int(row['user_id']), user_id2=str(cidx),cell=cell) 

这里cidx, cell, row['user_id'] 是参数。

{user_id1} 参数有效。

但添加属性名不以{user_id2}为参数

【问题讨论】:

  • 你得到什么错误?你能提供一些代码吗?您尝试的哪个代码不起作用,哪个起作用?
  • 嗨,约翰,感谢您的回复。这是我的代码。 query = 'Merge(c1:Customer{user_id: {user_id1},{user_id2}:{cell}})' g.run(query,user_id1=int(row['user_id']),user_id2=str(cidx), cell=cell) 这里 cidx, cell, row['user_id'] 是参数。 {user_id1} 参数有效。但它不以 {user_id2} 作为参数来添加属性名称。

标签: csv neo4j cypher py2neo


【解决方案1】:

Cypher 查询不能通过属性名称参数化。

参数可用于:

  • 文字和表达式
  • 节点和关系 ID
  • 仅适用于显式索引:索引值和查询

参数不能用于以下结构,因为它们构成了编译到查询计划中的查询结构的一部分:

  • 属性键;所以,MATCH (n) WHERE n.$param = 'something' 无效

  • 关系类型

  • 标签

更多详情请参考Neo4j Documentation

编辑:

您可以格式化字符串以将属性名称添加为:

query = 'Merge(c1:Customer{user_id: {user_id1}, %s :{cell}})' % str(cidx)

从run方法中去掉参数user_id2

g.run(query, user_id1=int(row['user_id']), cell=cell) 

【讨论】:

  • 还有其他选择吗?
  • 您可以在运行之前在 python 中格式化字符串。你能在问题中分享你的代码sn-p吗?
  • 详情可以参考这个问题:stackoverflow.com/questions/55006763/…
  • 您好 Raj,感谢您提供的信息。这是我的代码。 query = 'Merge(c1:Customer{user_id: {user_id1},{user_id2}:{cell}})' g.run(query,user_id1=int(row['user_id']),user_id2=str(cidx), cell=cell) 这里 cidx, cell, row['user_id'] 是参数。 {user_id1} 参数有效。但它不以 {user_id2} 作为参数来添加属性名称
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2020-04-21
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多