當前位置:網站首頁>[知識圖譜]cql與py2neo學習筆記
[知識圖譜]cql與py2neo學習筆記
2022-07-23 04:02:37【熱愛旅行的小李同學】
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)
版權聲明
本文為[熱愛旅行的小李同學]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207221748414284.html
邊欄推薦
猜你喜歡
[論文翻譯] Generalized Radiograph Representation Learning via Cross-Supervision Between Images
codeforce D2. RGB Substring (hard version) 滑動窗口
服務器buffer/cache 的產生原因和釋放buffer/cache
NFS共享存儲服務
MySQL 增删改查(進階)
十七、C函數指針與回調函數
QT筆記—— QTableWidget 之 拖拽行數 和 移動
女嘉賓報名
MySQL密碼正確但是啟動報錯Unable to create initial connections of pool.Access denied for user ‘root‘@‘localhost
【SDIO】SD2.0協議分析總結(三)-- SD卡相關命令介紹
隨機推薦
- App移動端測試【6】應用程序(apk)包管理與activity
- Qt | 模態對話框和非模態對話框 QDialog
- 在各類數據庫中隨機查詢n條數據
- 二、IDEA搭建JFinal項目+代碼自動生成+數據庫操作測試(三種方式)
- Flutter 第一個程序Hello World!
- 派生類的構造函數和析構函數
- NewSQL數據庫數據模型設計
- 2017年終總結
- dns劫持如何完美修複?dns被劫持如何解决如何完美修複
- flask 跨域
- 鏈棧實現(C語言)
- DETR 論文精讀,並解析模型結構
- 【FPGA】:ip核--DDR3
- 微信小程序Cannot read property 'setData' of null錯誤
- BUUCTF闖關日記--[網鼎杯 2020 青龍組]AreUSerialz
- 嵌入式系統學習筆記
- 水庫河道應急廣播系統解决方案
- Cartesi 2022 年 3 月回顧
- Daily Leetcode-11 分治
- 智源社區AI周刊#90:馬毅認為智能不可能依賴大算力實現;Hugging Face博客揭秘Bloom訓練細節;ICML最佳論文獎公布
- TypeScript
- 開源工具 SAP UI5 Tools 介紹
- Lark教程指南
- 網絡安全——使用Evil Maid物理訪問安全漏洞進行滲透
- 網絡安全—使用Ubuntu本地提權漏洞進行滲透及加固
- JWT工具類編寫
- Day1 Running Sum of 1d Array/Find Pivot Index/用兩個棧實現隊列
- socket編程之常用api介紹與socket、select、poll、epoll高並發服務器模型代碼實現
- 深入研究容器隊列
- Bean的初始化回調方法和釋放資源的回調方法
- 爬蟲數據保存到mysql數據庫
- 通過SQL進行數據分發
- Redis 分布式鎖如何自動續期(經典解决方案)
- 虹科動態 | cippe2022即將舉辦,報名火熱進行中
- Kotlin之匿名內部類(object: xxxx)
- 面試突擊:truncate、delete和drop的6大區別
- Ubuntu安裝Docker及Docker的基本命令 安裝MySQL
- LeetCode--棧和隊列篇
- etcd 集群部署
- TCP/IP協議族中需要必知必會的十大問題