在python上通过CQL语句来对neo4j数据库进行操作
引言
这篇文章是基于 neo4j 数据库的原生语法 CQL (这里可以理解为mysql里的sql语句),来对neo4j数据库进行读取及对CSV文件进行读取创建节点操作
相对于我之前的这篇python 连接neo4j在创建节点代码上要简单一些
本文所有的操作都是基于CQL语句来对neo4j数据库进行操作,所以在直接上手代码之前,需要对CQL语法有着一定的了解
所以小弟不才,在此对CQL语法进行一点粗鄙的讲解
如果对于CQL语句熟练的hxd,可以直接跳到最后边去看上手代码
1,节点创建
#这里创建的是一个空的节点
create (n:animal ) retun n
# 创建节点并设置节点属性 直接在花括号里边添加属性
create (n:皮卡抽 {皮卡抽名称:"原地抽风",学历:"小学",职务:"抽风大队队长"}) return n
字段解析:
create ,创建
n ,是个变量,你可以随意起名字,比如:b,a,c,fucking,bitch,奥特曼,皮卡抽等等,反正最后你 return 的值是你定义的就行,都可以查出来。
皮卡抽 , 相当于MySQL里的表名称 可以自定义
皮卡抽名字, 相当于MySQL里表的字段名称
return ,返回你查询的信息,如果节点里边包含有多个属性,你可以 return.xx(这里写你要查询的属性字段名称)
2,节点与节点之间的关系创建
# 这里的方法是先创建节点后创建关系,这样比较清晰但是比较麻烦
match (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})
match (b:皮卡抽 {皮卡抽名称:"原地抽风"})
merge a = (n)-[r:朋友 {拜把子程度:"互为对方亲爹"}]->(b)
return a,n,b
# 这里是关系和节点同时创建 利用到函数(merge)
merge (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})
merge (b:皮卡抽 {皮卡抽名称:"原地抽风"})
# 这里是 顺便设置了 节点与节点之间那条线的 属性
merge a = (n)-[r:朋友 {拜把子程度:"互为对方亲爹"}]->(b)
return a,n,b
字段解析:
match ,相当于mysql 里的 select ,查询语句
merge ,相当于 match 和 create 的结合
查询语句就很简单,有手就行,全都是基于 match 函数来查询
1,基础查询
# 查询皮卡抽这个数据表的所有数据
match (n:皮卡抽) return n
# 查询所有皮卡抽数据的 皮卡抽名称 (这个皮卡抽名称必需要是节点属性里有的)
match (n:皮卡抽) return n.皮卡抽名称
2,条件查询
# 条件查询 皮卡抽名称:"螺旋抽风"
match (n:皮卡抽 {皮卡抽名称:"螺旋抽风"}) return n
# 如果需要返回纯文本
match (n:皮卡抽 {皮卡抽名称:"螺旋抽风"}) return properties(n)
# 查询关联节点
MATCH (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})--(c:皮卡抽) return c
# 查询关联(就是那条线的属性)属性
MATCH (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})-[r:朋友]-(c:皮卡抽) return r
在neo4j里边的修改、添加都是修改节点属性** 用的是 set 函数
1,选取节点属性修改
MATCH (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})
SET n.皮卡抽名称 = '抽风上天'
RETURN n
2,全部节点属性修改
match (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})
set n = {皮卡抽名称:"金刚抽风机",身高:"150",重量:"20"}
return n
3,添加节点属性
match (n:皮卡抽 {皮卡抽名称:"螺旋抽风"})
SET n += {法号:"抽风集大成者-抽神"}
RETURN n
4,选取节点字段进行修改,replace 函数,修改字段
MATCH (n:`皮卡抽`)
set n.学历 = REPLACE(n.学历,"小学","中学")
return n
修改过后数据:
删除所有数据
match (n) detach delete n
如果节点与节点之间有关系连接得先删除关系(就是那条线)
match (n:皮卡抽 {原地抽风})-[r:朋友]-(b:皮卡抽 {螺旋抽风}) delete r
还有一种最方便简洁删除的办法,不过这里是连节点一起删除了,慎用
通过python+CQL语句来对neo4j数据库进行节点创建
import pandas
from py2neo import Graph #这是操作neo4j的库
# 连接数据库
'''
这里是上传数据,有小伙伴不会的可以看我上边给出的CQL语句,把CQL搞到g.run()里边就可以了
'''
g = Graph('http://neo4j:你的密码@你的IP:7474/db/data/')#neo4j.bat console
def demo():
frame = pandas.read_excel("./data/皮卡抽.xlsx")
for i in frame.index:
name = frame["皮卡抽名称"].values[i]
n3 = frame["法号"].values[i]
g.run(
"create (nb:皮卡抽 {皮卡抽名称:" + "'{}'".format(name) + "}) "
"set nb+= {法号: " + "'{}'".format(n3) + "} return nb"
)
demo()
python+CQL查询neo4j数据库并对数据进行处理
import pandas
from py2neo import Graph #这是操作neo4j的库
# 连接数据库
'''
这里是查询数据,有小伙伴不会的可以看我上边给出的CQL语句,把CQL搞到g.run()里边就可以了
'''
g = Graph('http://neo4j:你的密码@你的IP:7474/db/data/')#neo4j.bat console
def query():
# 查出来的结果我转换成了 ndarray 类型,还有其它类型,但是都没有 ndarray 好处理
read = g.run("MATCH (n:`皮卡抽`) RETURN properties(n) ").to_ndarray()
res_list = []
for i in read:
i = i[0]
res_list.append(i)
print(res_list)
query()
结果:
一位黑人兄弟穿了丝袜,请问这算是黑丝还是肉丝?