[知识图谱]cql与py2neo学习笔记

cql与py2neo学习笔记

CQL

开启neo4j服务

neo4j.bat console

默认链接是 http://llocalhost:7474

删除数据库中的图

match (n) detach delete n

创建节点

create (p:Person{name:"张三",age:18})

批量创建节点

create (p1:Person{name:"李四",age:19}),(p2:Person{name:"王五",age:20}),(p3:Person{name:"赵六",age:20}),(p4:Person{name:"田七",age:22})

查看图

match (n) return n

在这里插入图片描述

创建关系

match (p1:Person{name:"张三"}), (p2:Person{name:"李四"}) merge (p1)-[:弟弟]->(p2);
match (p2:Person{name:"李四"}), (p1:Person{name:"张三"}) merge (p2)-[:哥哥]->(p1);

创建关系同时增加属性

match (p1:Person{name:"张三"}), (p2:Person{name:"王五"}) merge (p1)-[:学生{
   
   time:2}]->(p2)

在这里插入图片描述

不同标签之间建立关系

match (p:Person{name:"张三"}), (n:Location{city:"北京"}) merge (p)-[:出生地]->(n);

在这里插入图片描述

查询所有在北京出生的人

match (p:Person)-[:出生地]->(n:Location{city:"北京"}) return p, n

在这里插入图片描述

查询所有对外有关系的节点

match (a)-->() return a

在这里插入图片描述

查询所有有关系的节点

match (a)--() return a

在这里插入图片描述

查询所有有同学关系的节点

match (a)-[:同学]-() return a

在这里插入图片描述

增加/修改属性

match (p:Person{name:"张三"}) set p.sex = "男"

删除属性

match (p:Person{name:"张三"}) remove p.sex

删除关系(可指定具体关系,可同时删除节点)

match (p1:Person{name:"张三"})-[r]-(p2:Person{name:"田七"}) delete r

删除节点

match (p:Person{name:"田七"}) delete p

条件查找

match (p:Person) where(p.age>19)  return p

在这里插入图片描述

汇总

match (n) detach delete n;
create (p:Person{name:"张三",age:18});
create (p1:Person{name:"李四",age:19}),(p2:Person{name:"王五",age:20}),(p3:Person{name:"赵六",age:20}),(p4:Person{name:"田七",age:22});
create (n:Location{city:"北京"});
create (n1:Location{city:"上海"}), (n2:Location{city:"广州"});
match (n) return n;
match (p1:Person{name:"张三"}), (p2:Person{name:"李四"}) merge (p1)-[:弟弟]->(p2);
match (p2:Person{name:"李四"}), (p1:Person{name:"张三"}) merge (p2)-[:哥哥]->(p1);
match (p1:Person{name:"张三"}), (p2:Person{name:"王五"}) merge (p1)-[:学生{
   
   time:2}]->(p2);
match (p1:Person{name:"张三"}), (p2:Person{name:"王五"}) merge (p2)-[:老师{
   
   time:2}]->(p1);
match (p1:Person{name:"张三"}), (p2:Person{name:"赵六"}) merge (p1)-[:朋友]->(p2);
match (p1:Person{name:"张三"}), (p2:Person{name:"田七"}) merge (p1)-[:同学]->(p2);
match (p:Person{name:"张三"}), (n:Location{city:"北京"}) merge (p)-[:出生地]->(n);
match (p:Person{name:"李四"}), (n:Location{city:"上海"}) merge (p)-[:出生地]->(n);
match (p:Person{name:"王五"}), (n:Location{city:"广州"}) merge (p)-[:出生地]->(n);
match (p:Person{name:"赵六"}), (n:Location{city:"北京"}) merge (p)-[:出生地]->(n);
match (p:Person)-[:出生地]->(n:Location{city:"北京"}) return p, n;
match (a)-->() return a;
match (a)--() return a;
match (a)-[:同学]-() return a;
match (p:Person{name:"张三"}) set p.sex = "男";
match (p:Person{name:"张三"}) remove p.sex;
match (p1:Person{name:"张三"})-[r]-(p2:Person{name:"田七"}) delete r;
match (p:Person{name:"田七"}) delete p;
match (p:Person) where(p.age>19)  return p

py2neo

安装py2neo

pip install --user --upgrade py2neo

导入相关包

from py2neo import Graph, Node, Relationship
from py2neo.matching import *

连接Neo4j服务

graph = Graph('http://localhost:7474', auth=("neo4j", "19980912"))

删除所有节点

graph.delete_all()

建立节点

p1 = Node("Person", name="张三", age=18)
graph.create(p1)

建立关系

r1 = Relationship(p1, '弟弟', p2)
graph.create(r1)

增加属性

p1['sex'] = '男'
graph.push(p1)

删除属性

del p1['sex']
graph.push(p1)

查找节点

nodes = NodeMatcher(graph)
result1 = nodes.match("Person", name="张三").first()
print(result1)

查找符合条件的节点

result3 = nodes.match("Person").where("_.age > 19").all()
for p in result3:
    print(p)

查询指定标签所有节点

persons = nodes.match("Person").all()
print("查询所有人")
for p in persons:
    print(p)

查询节点之间的关系

# 查询所有人包含的关系
matcher = RelationshipMatcher(graph)
result4 = matcher.match([p1], r_type=None).all()
for r in result4:
    print(r)

查询指定关系
查询到的结果需要用all()或first()转化为可输出的类型

result5 = matcher.match([p1, p2], r_type=None).all()
result6 = matcher.match([p2, p1], r_type=None).all()
for r in [result5, result6]:
    print(r)

cypher语句

result8 = graph.run("match (n) return n").to_series()
print(result8)
# 查询所有出生在北京的人
result9 = graph.run("match (p:Person)-[:出生地]->(n:Location{city:'北京'}) return p, n").to_data_frame()
print(result9)

删除关系

graph.run("""
    match (p1:Person{name:"张三"})-[r]-(p2:Person{name:"田七"}) delete r;"""
)

删除节点

# 删除节点
graph.delete(p5)

代码汇总

from py2neo import Graph, Node, Relationship
from py2neo.matching import *

# 连接Neo4j
graph = Graph('http://localhost:7474', auth=("neo4j", "19980912"))
print(graph)

"""
match (n) detach delete n;
create (p:Person{name:"张三",age:18});
create (p1:Person{name:"李四",age:19}),(p2:Person{name:"王五",age:20}),(p3:Person{name:"赵六",age:20}),(p4:Person{name:"田七",age:22});
create (n:Location{city:"北京"});
create (n1:Location{city:"上海"}), (n2:Location{city:"广州"});
"""
# 删除所有节点
graph.delete_all()

# 建立节点
p1 = Node("Person", name="张三", age=18)
p2 = Node("Person", name="李四", age=19)
p3 = Node("Person", name="王五", age=20)
p4 = Node("Person", name="赵六", age=20)
p5 = Node("Person", name="田七", age=22)
graph.create(p1)
graph.create(p2)
graph.create(p3)
graph.create(p4)
graph.create(p5)
l1 = Node("Location", city="北京")
l2 = Node("Location", city="上海")
l3 = Node("Location", city="广州")
graph.create(l1)
graph.create(l2)
graph.create(l3)

"""
match (p1:Person{name:"张三"}), (p2:Person{name:"李四"}) merge (p1)-[:弟弟]->(p2);
match (p2:Person{name:"李四"}), (p1:Person{name:"张三"}) merge (p2)-[:哥哥]->(p1);
match (p1:Person{name:"张三"}), (p2:Person{name:"王五"}) merge (p1)-[:学生{time:2}]->(p2);
match (p1:Person{name:"张三"}), (p2:Person{name:"王五"}) merge (p2)-[:老师{time:2}]->(p1);
match (p1:Person{name:"张三"}), (p2:Person{name:"赵六"}) merge (p1)-[:朋友]->(p2);
match (p1:Person{name:"张三"}), (p2:Person{name:"田七"}) merge (p1)-[:同学]->(p2);
match (p:Person{name:"张三"}), (n:Location{city:"北京"}) merge (p)-[:出生地]->(n);
match (p:Person{name:"李四"}), (n:Location{city:"上海"}) merge (p)-[:出生地]->(n);
match (p:Person{name:"王五"}), (n:Location{city:"广州"}) merge (p)-[:出生地]->(n);
"""
# 节点关系建立
r1 = Relationship(p1, '弟弟', p2)
r2 = Relationship(p2, '哥哥', p1)
r3 = Relationship(p1, '学生', p3)
r4 = Relationship(p3, '老师', p1)
r5 = Relationship(p1, '朋友', p4)
r6 = Relationship(p1, '同学', p5)
r7 = Relationship(p1, '出生地', l1)
r8 = Relationship(p2, '出生地', l2)
r9 = Relationship(p3, '出生地', l3)
r10 = Relationship(p4, '出生地', l1)
graph.create(r1)
graph.create(r2)
graph.create(r3)
graph.create(r4)
graph.create(r5)
graph.create(r6)
graph.create(r7)
graph.create(r8)
graph.create(r9)
graph.create(r10)

"""
match (p:Person{name:"张三"}) set p.sex = "男";
match (p:Person{name:"张三"}) remove p.sex;
"""
# 增加属性
p1['sex'] = '男'
graph.push(p1)
# 删除属性
del p1['sex']
graph.push(p1)

"""
match (n) return n;
match (p:Person)-[:出生地]->(n:Location{city:"北京"}) return p, n;
match (a)-->() return a;
match (a)--() return a;
match (a)-[:同学]-() return a;
"""
# 查找
nodes = NodeMatcher(graph)
result1 = nodes.match("Person", name="张三").first()
print(result1)

result2 = nodes.match("Person").all()
for person in result2:
    print(person)
print(len(result2))

# 模糊匹配
result3 = nodes.match("Person").where("_.age > 19").all()
for p in result3:
    print(p)

# 查询所有人
persons = nodes.match("Person").all()
print("查询所有人")
for p in persons:
    print(p)
# 查询所有城市
locations = nodes.match("Location").all()
for l in locations:
    print(l)

# RelationshipMatcher查询关系
# 查询所有人包含的关系
matcher = RelationshipMatcher(graph)
result4 = matcher.match([p1], r_type=None).all()
for r in result4:
    print(r)

# 查询张三和李四的关系
result5 = matcher.match([p1, p2], r_type=None).all()
result6 = matcher.match([p2, p1], r_type=None).all()
for r in [result5, result6]:
    print(r)

# 查询所有出生地关系
result7 = matcher.match(None, r_type='出生地').all()
for r in result7:
    print(r)

# cypher语句
result8 = graph.run("match (n) return n").to_series()
print(result8)
# 查询所有出生在北京的人
result9 = graph.run("match (p:Person)-[:出生地]->(n:Location{city:'北京'}) return p, n").to_data_frame()
print(result9)

# 删除关系
graph.run("""
    match (p1:Person{name:"张三"})-[r]-(p2:Person{name:"田七"}) delete r;"""
)
# 删除节点
graph.delete(p5)

猜你喜欢

转载自blog.csdn.net/m0_46275020/article/details/123819350
今日推荐