python 基于CQL操作neo4j数据库

本文核心思想:

在python上通过CQL语句来对neo4j数据库进行操作


引言
这篇文章是基于 neo4j 数据库的原生语法 CQL (这里可以理解为mysql里的sql语句),来对neo4j数据库进行读取及对CSV文件进行读取创建节点操作
相对于我之前的这篇python 连接neo4j在创建节点代码上要简单一些

本文所有的操作都是基于CQL语句来对neo4j数据库进行操作,所以在直接上手代码之前,需要对CQL语法有着一定的了解
所以小弟不才,在此对CQL语法进行一点粗鄙的讲解

如果对于CQL语句熟练的hxd,可以直接跳到最后边去看上手代码


CQL创建语句

1,节点创建

 #这里创建的是一个空的节点
create (n:animal ) retun n    
# 创建节点并设置节点属性 直接在花括号里边添加属性
create (n:皮卡抽 {皮卡抽名称:"原地抽风",学历:"小学",职务:"抽风大队队长"}) return n

python 基于CQL操作neo4j数据库_第1张图片

字段解析:

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

python 基于CQL操作neo4j数据库_第2张图片

字段解析:

match ,相当于mysql 里的 select ,查询语句
merge ,相当于 match 和 create 的结合


CQL 查询语句

查询语句就很简单,有手就行,全都是基于 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

python 基于CQL操作neo4j数据库_第3张图片


CQL 修改、添加语句

在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

图4实例,原数据:
python 基于CQL操作neo4j数据库_第4张图片

修改过后数据:

python 基于CQL操作neo4j数据库_第5张图片


CQL删除语句

删除所有数据

match (n) detach delete n

如果节点与节点之间有关系连接得先删除关系(就是那条线)

match (n:皮卡抽 {原地抽风})-[r:朋友]-(b:皮卡抽 {螺旋抽风}) delete r

还有一种最方便简洁删除的办法,不过这里是连节点一起删除了,慎用

python 基于CQL操作neo4j数据库_第6张图片


python+CQL 操作neo4j数据库

通过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数据库_第7张图片

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()

结果:

python 基于CQL操作neo4j数据库_第8张图片

总结

一位黑人兄弟穿了丝袜,请问这算是黑丝还是肉丝?

python 基于CQL操作neo4j数据库_第9张图片

你可能感兴趣的:(教程,笔记,neo4j,数据库)