一、neo4j语法操作
1、首先,我们删除数据库中以往的图,(确保一个空白的环境进行操作):
MATCH (n) DETACH DELETE n
MATCH是匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的n为标识符。
2、我们创建一个课程节点:
CREATE (n:Class {name:'大学英语Ⅱ'}) RETURN n
CREATE是创建操作,Class是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Class的节点,该节点具有一个name属性,属性值是大学英语Ⅱ。
3、我们继续来创建更多的课程节点,并分别命名:
CREATE (n1:Class {name:'大学英语Ⅱ'})
CREATE (n2:Class {name:'大学英语Ⅲ'})
CREATE (n3:Class {name:'大学英语Ⅳ'})
RETURN n1,n2,n3
4、接下来创建专业节点
CREATE (m1:profession {name:'计算机专业'})
CREATE (m2:profession {name:'软件工程'})
CREATE (m3:profession {name:'大数据'})
CREATE (m4:profession {name:'信管'})
RETURN m1,m2,m3,m4
5、接下来创建关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC]->(n2)
RETURN n1, n2
6、关系也可以增加属性
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC {since:2021}]->(n2)
RETURN n1, n2
7、接下来增加更多的关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n3:Class {name:'大英Ⅳ'})
CREATE (n1)-[r1:BASIC]->(n2)
CREATE (n2)-[r2:BASIC]->(n3)
RETURN n1, n2,n3
也可以在创建节点的时候建立关系,如例子:CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'})
8、然后,我们需要建立不同类型节点之间的关系-课程和专业的关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n3:Class {name:'大英Ⅳ'})
CREATE (m1:profession {name:'计算机专业'})
CREATE (m2:profession {name:'软件工程'})
CREATE (m3:profession {name:'大数据'})
CREATE (m4:profession {name:'信管'})
CREATE (n1)-[r1:BASIC]->(n2)
CREATE (n2)-[r2:BASIC]->(n3)
CREATE (m1)-[r3:REQUIRE]->(n1)
CREATE (m2)-[r4:REQUIRE]->(n1)
CREATE (m3)-[r5:REQUIRE]->(n1)
CREATE (m4)-[r6:REQUIRE]->(n1)
RETURN n1, n2,n3,m1,m2,m3,m4
二、python操作neo4j
二:python操作neo4j的实现
python中neo4j的操作可以利用驱动包或者py2neo包,
我采用py2neo第三方包实现以下简单功能,先建立一个neo4j的链接
对于neo4j的安装其实比较简单,这里就跳过
def__init__(self):
self.conn = Graph("http://localhost:7474",username="11111",password="11111")
节点和关系的创建
a = Node(label, **doc1)
b = Node(label, **doc2)
r2 = Relationship(b, ship, a)
self.conn.merge(r2,label=label)
更新节点属性
node.update(doc)
通过关系查找相关联的关系节点
selector = NodeSelector(self.conn)
query = '_.age=22'
persons = selector.select(label).where(query).order_by('_.' + order)
添加节点
obj = self.get(label, field, value)
tmp_obj = label()
tmp_obj.setAll(doc=doc)
obj.knows.add(tmp_obj)
print(list(obj.knows))
self.conn.push(obj)
删除节点,这里有坑,官方文档说删除节点必须先删除关系。当节点大于2时,比如a->b->c 这时官方文档中的栗子有报错。因此自己现在用这种方式删除
obj = self.get(label, src_field, src_value)
tar = self.get(label, desc_field, desc_value)
obj.knows.remove(tar)
self.conn.push(obj)
self.conn.delete(tar)