请问使用cypher在函数中查询,如何把关键字替换成函数的入参?
发布于 7 年前 作者 c814516149 3031 次浏览 来自 问答

MATCH (n:symptom) WHERE n.symName =~’.疼.’ RETURN n.symId, n.symName 我想做这样一个查询,但是疼要用函数的入参来替换,请问这要怎么实现呢,我的函数是go语言的,如果有其他语言的参考也可以~

8 回复

go 语音不了解,最笨的办法你可以拼接 cypher 字符串啊,把参数拼进去, 如 var name=’.疼.’ ; var cypher ='MATCH (n:symptom) WHERE n.symName =~ +name + RETURN n.symId, n.symName’ 这样不行吗

@pangguoming 感谢回复,最后就是拼接字符串做得,可以实现的

。。。。。以前用sql 也是用这种笨办法,虽然会耦合,但关键时候管用

@pangguoming 我也是遇到这个问题,非常需要您的帮忙谢谢 我程序里是这样写的 var = "Person" data = graph.run(‘match (n:symp) where n.symp =~ var return n limit 5’) 我py2neo版本是3.x,python版本3.5 graph = Graph(…) 下面是我的报错信息 py2neo.database.status.CypherSyntaxError: Variable var not defined (line 1, column 32 (offset: 31)) "match (N:symp) where N.symp =~ var return N limit 5" 期望得到您的回复,谢谢!

@liutianling 用拼接字符串"match (N:symp) where N.symp =~ “+var+“ return N limit 5"

@pangguoming 非常感谢大神的回复 我试了下,好像达不到目的 代码如下 name = "牛黄清热胶囊" var = "中药" print(name) data = graph.run(‘match (n:中药) return n limit 5’).data() print(data)

var = "中药" print(name) data = graph.run(‘match (n:symp) where n.symp =~ “+var+” return n limit 5’).data() print(data) 结果如下: 牛黄清热胶囊 [{‘n’: (_970948:中药 {name: ‘\u675c\u82e5\u6563’})}, {‘n’: (_970951:中药 {name: ‘\u5973\u5a04\u83dc\u6839’})}, {‘n’: (_2197484:中药 {name: ‘\u6bdb\u6768\u6885\u6839\u76ae’})}, {‘n’: (_2197498:中药 {name: ‘\u4e9a\u5b9d\u4e00\u6e05\u6ef4\u4e38’})}, {‘n’: (_2197500:中药 {name: ‘\u91d1\u53f6\u8fc7\u8def\u9ec4’})}] 牛黄清热胶囊 [] 就是说字符串拼接的没有查到结果,希望能得到您的继续帮助,谢谢! 感觉是label(symp)并不是节点的一个属性,好像不能用这种 . (点操作),

@liutianling Python里是单引号 data = graph.run(‘match (n:symp) where n.symp =~ ‘+var+’ return n limit 5’).data()

@pangguoming再次感谢您的回复 label = '中药’ data = graph.run(‘match (n) where n:中药 return n limit 5’).data() print("haha: ", data) haha: [{‘n’: (_970948:中药 {name: ‘\u675c\u82e5\u6563’})}, {‘n’: (_970951:中药 {name: ‘\u5973\u5a04\u83dc\u6839’})}, …]

这样写没有问题,可以查询到结果 data = graph.run(‘match (n:symp) where n.symp =~ ‘+label+’ return n limit 5’).data() print("haha: ", data) 加双引号不报错,但是查询不到任何结果

data = graph.run(‘match (n:symp) where n.symp =~ ‘+label+’ return n limit 5’).data() print("haha: ", data) 加单引号会报错: neo4j.exceptions.CypherSyntaxError: Variable 中药 not defined (line 1, column 32 (offset: 31)) "match (n:symp) where n.symp =~ 中药 return n limit 5" 不知道这是什么情况,谢谢您。。。

回到顶部