国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python使用Py2neo創建Neo4j的節點和關系

Python使用Py2neo創建Neo4j的節點和關系

2021-12-23 11:08流浪貓貓 Python

Neo4j是一款開源圖數據庫,使用Python語言訪問Neo4j可以使用Py2neo。本文介紹了使用Py2neo訪問Neo4j,批量創建節點和關系的方法

Python使用Py2neo創建Neo4j的節點和關系

Neo4j是一款開源圖數據庫,使用Python語言訪問Neo4j可以使用Py2neo。本文介紹了使用Py2neo訪問Neo4j,批量創建節點和關系的方法。Py2neo提供了直接執行Cypher語句的方法,也提供了諸如Node、Relationship、Path一系列的數據結構,在不同的場景下可以靈活使用。

?本文使用的Py2neo是2021.1之后的版本,手冊請戳這里:
The Py2neo Handbook

一、安裝Py2neo

使用pip安裝Py2neo,執行:

?
1
pip install py2neo

查看已安裝的Py2neo是什么版本的:

?
1
pip show py2neo

二、連接Neo4j數據庫

本文中會用到多種數據類型,在此一并引用

import numpy as np
import pandas as pd
from py2neo import Node,Relationship,Graph,Path,Subgraph

配置Neo4j數據庫的訪問地址、用戶名和密碼

?
1
2
3
neo4j_url = '訪問地址'
user = '用戶名'
pwd = '密碼'

在此時間段之前訪問數據庫的方式為:

?
1
graph = Graph(neo4j_url, username=user, password=pwd)

在此時間段之后的版本訪問數據庫的方式為(就是這么不兼容):

?
1
graph = Graph(neo4j_url,  auth=(user, pwd))

1. 使用graph.run執行Cypher語句創建節點

如果熟悉Cypher語句的話,可以通過使用graph.run執行Cypher語句來實現創建節點等操作,方法如下所示:

?
1
2
3
cypher_ = "CREATE (:Person {name:'王王', age:35, work:'服務器之家}),\
(:Person {name:'李李', age:20, work:'服務器之家})"
graph.run(cypher_)

這樣就在Neo4j中創建了兩個label為Person的節點,第一個節點的name屬性為“王王”,age屬性為35,work屬性為“服務器之家”,第二個節點的name屬性為“李李”,age屬性為20,work屬性為“宇服務器之家”。

同樣,可以通過調用graph.run執行Cypher語句創建關系。

?
1
2
3
cypher_ = "MATCH (from:Person{name:'王王'}),\
(to:Person{name:'李李'}) MERGE (from)-[r:同事]->(to)"
graph.run(cypher_)

這樣在Neo4j中就有了具有同事關系的兩個Person節點。

Python使用Py2neo創建Neo4j的節點和關系

2. 使用Node數據結構創建節點

Py2neo也提供graph.create方法來創建節點和關系

?
1
2
node = Node("Person", name="李李", age=20, work="服務器之家")
graph.create(node)

與執行Cypher語句的效果相同,在Neo4j中創建了一個Person節點。

需要注意的是,這兩種創建方法,如果反復執行的話,是會在Neo4j中創建出重復的節點的,即name、age、work屬性完全一樣,但在Neo4j中的id不一樣的多個節點。

3. 使用Node、Relationship和Subgraph數據結構創建節點和關系

上面兩種方法都是一次創建一個節點或者一個關系,Py2neo也提供了批量創建節點和關系的方法,而且性能更優。下面就以下圖中的圖譜為例,使用Py2neo提供Node、Relationship和Subgraph數據結構在Neo4j中創建節點和關系。

Python使用Py2neo創建Neo4j的節點和關系

首先創建一些label為Person的節點,即Node對象,第一個參數是label,屬性按key=value依次作為參數傳入。如果節點有多個label,可以用Node.add_label("label_text")來追加label。

?
1
2
3
4
5
6
node1 = Node("Person", name="王王", age=35, work="服務器之家")
node2 = Node("Person", name="李李", age=20, work="服務器之家")
node3 = Node("Person", name="張張", age=30, work="服務器之家")
node4 = Node("Person", name="趙趙", age=45, work="月亮中學")
node4.add_label("Teacher")
node5 = Node("Person", name="劉劉", age=20, work="地球電子商務公司")

再創建一些label為Location的節點

?
1
2
3
node6 = Node("Location", name="南京")
node7 = Node("Location", name="江寧區")
node8 = Node("Location", name="祿口機場")

建立一些Person和Person節點之間的關系,Neo4j中的關系是有方向的,所以Relationship第一個參數為起始節點,第三個參數是結束節點,而第二個節點為關系的類型。這里創建的同事、鄰居的關系為雙向的,老師、學生的關系為單向。

?
1
2
3
4
5
6
7
8
9
10
11
relation1 = Relationship(node1, "同事", node2)
relation2 = Relationship(node2, "同事", node1)
 
relation3 = Relationship(node2, "同事", node3)
relation4 = Relationship(node3, "同事", node2)
 
relation5 = Relationship(node3, "鄰居", node4)
relation6 = Relationship(node4, "鄰居", node3)
 
relation7 = Relationship(node4, "學生", node5)
relation8 = Relationship(node5, "老師", node4)

創建一些Location和Location節點之間的關系,地域之間的包含關系為單向。

?
1
2
relation9 = Relationship(node6, "包含", node7)
relation10 = Relationship(node7, "包含", node8)

創建Person節點和Location節點之間的關系,這里“到訪”的關系是有屬性的,date表示到訪的日期,stay_hours表示停留的時間。可以使用一個key:value的字典數據結構保存屬性,再賦予關系

?
1
2
3
4
5
properties1={'date':'2021-7-16','stay_hours':1}
relation11 = Relationship(node2, "到訪", node8, **properties1)
 
properties2={'date':'2021-7-19','stay_hours':4}
relation12 = Relationship(node5, "到訪", node8, **properties2)

然后將以上所有節點和關系組成Subgraph

?
1
2
3
4
5
6
node_ls = [node1, node2, node3, node4,
           node5, node6, node7, node8]
relation_ls = [relation1, relation2, relation3, relation4,
               relation5, relation6, relation7, relation8,
               relation9, relation10, relation11, relation12]
subgraph = Subgraph(node_ls, relation_ls)

最后通過事務類Transaction提交,批量創建這些節點和關系。這里tx.create并沒有真正創建節點和關系,直到graph.commit才一次性提交到Neo4j進行創建。

?
1
2
3
tx = graph.begin()
tx.create(subgraph)
graph.commit(tx)

重復執行上面的命令,不會創造出重復的節點和關系。這一點手冊中有說明:“subgraph中的已經和數據庫綁定的實體將保持不變,那些沒有綁定的將在數據庫中新建并綁定上。”

create(subgraph) Create remote nodes and relationships that correspond to those in a local subgraph. Any entities in subgraph that are already bound to remote entities will remain unchanged, those which are not will become bound to their newly-created counterparts.

三、性能對比

做一個簡單的實驗粗略地對比逐個創建和批量創建的時間開銷。在Neo4j為空數據庫的情況下,分別采用逐個創建和批量創建的方法創建10000個節點,每個節點有name和age兩個屬性,都是隨機生成的,使用jupyter notebook的%%time命令計算時間開銷。

?
1
2
import random
N = 10000

逐個創建節點:

?
1
2
3
4
5
6
7
8
9
%%time
for i in range(N):
    random_name = "P"+str(round(random.random()*N*2))
    random_age = round(random.random()*15)
    node = Node("Person", name=random_name, age=random_age)
    graph.create(node)
 
CPU times: user 50.3 s, sys: 4.19 s, total: 54.5 s
Wall time: 5min 16s

批量創建節點:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%%time
node_ls = []
for i in range(N):
    random_name = "P"+str(round(random.random()*N*2))
    random_age = round(random.random()*15)
    node = Node("Person", name=random_name, age=random_age)
    node_ls.append(node)
 
subgraph = Subgraph(node_ls, [])
tx = graph.begin()
tx.create(subgraph)
graph.commit(tx)
 
CPU times: user 448 ms, sys: 75.5 ms, total: 523 ms
Wall time: 1.46 s

實驗中也發現,只是創建節點的話,批量創建方法的時間開銷幾乎是線性增長的,當一次性提交10萬個節點的創建任務時,時間開銷大約在4.5秒。
在使用Py2neo構建圖譜時,盡可能使用批量創建方法。先創建節點(Node)對象、關系(Relationship)對象,再構成子圖(Subgraph),最后利用事務類一次提交創建。
下一篇將介紹如何運用Py2neo查詢節點、關系和路徑。

這篇關于用Py2neo創建Neo4j的節點、關系及路徑的文章就先介紹到這了,更多相關Py2neo內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000040519140

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美专区 | 91精品国产综合久久久久久 | 久久综合九色综合欧美狠狠 | 伊人春色在线播放 | 国产黄视频在线观看 | 高清国产一区二区三区四区五区 | 成人午夜激情 | 99在线视频播放 | 综合伊人| 曰批免费视频播放免费 | 91精品国产综合久久久久久丝袜 | 日韩在线视频一区 | 欧美精品一区二区三区在线播放 | 国产91视频在线观看 | 欧美日韩一区二区三区不卡视频 | 国产精品久久久久久久久久久久| 亚洲天堂网站 | 欧美在线观看禁18 | 亚洲一区 中文字幕 | 亚洲精品成人免费 | 爱干在线| 国产成人视屏 | 亚洲视频一区 | 国产伦精品一区二区三区四区视频_ | 毛片链接| 欧美中文在线 | 网站黄色在线 | 国产日韩精品在线观看 | 黄色tv网站| 免费观看特级毛片 | 成人aaa毛片 | 日韩免费在线观看视频 | 狼人综合网 | 黄色片小视频 | 欧美自拍一区 | 亚洲国产一区视频 | 国产高清美女一级a毛片久久 | 欧美大片免费观看 | 国产精品日韩欧美 | 日韩一级精品视频在线观看 | 成人在线免费观看视频 |