记一个 neo4j 与 py2neo 的 match 语句的坑
2020-06-16 本文已影响0人
魔法双击
最近项目中需要使用 neo4j 构建知识图谱。
在师兄建议下使用了 py2neo ,而不是 neo4j 官方的api.
初始化
使用时先要在 Terminal运行
./bin/neo4j console
然后在python里面运行你的代码
graph = Graph("http://localhost:7474",auth=("neo4j", "xxx")) #auth参数 账号、密码
graph.delete_all() # 先清空
graph.begin() # 开搞
...
然后每次创建 Node/Relationship后 graph.merge(...)
,就都能在网页版http://localhost:7474/browser/看到效果啦
match语句的坑
首先,我是用最新版 neo4j (2020.06.16) 与 py2neo v4.
先尝试用了官方v4手册上的
matcher = NodeMatcher(graph)
node1 = matcher.match(“Person”, name=“Tom”).first()
并不行,报错。
找到了http://neo4j.com.cn/topic/5e8d8d245426e67e5afcf66c 这位同样被新版 neo4j 坑了的童鞋。
改成这样就可了。
node1 = matcher.match(‘Person’).where("_.name=‘Tom’").first()
但是
还有一个小坑
就是如果你要在where
里使用变量,如
.where("_.name=name1")
,这样是不行的!!!
.where("_.name='name1'")
,这样也是不行的!!!
不想去分析怎么转义或者在引号里引用变量的我只好非常无奈地把代码写成了这样
.where("_.name=" + "'" + name1 + "'")
毕竟 python 嘛,能跑出结果就行