py2neo第一章:先了解點數據類型

一、py2neo.data - Data Types

常用包Node,Relationship,Properties,Subgraph,Walkable

學習單詞:類擴展:extend class;基類:base class;派生類:derived class;遍歷:traversal;連接:concatenating;
對稱差分:Symmetric difference;交集:intersection;並集:union;可交替的:alternating;字段:field;bracketed syntax

1.1 Node 用於操作結點

class Node(*labels, **properties)
	node == other # 如果相等返回True,可以用於判斷。結點相等是僅依賴於它們的遠程結點ID是否相等(neoj爲每一個結點自動加上一個ID),無關於它們的屬性或者標籤是否相等。
	node != other # 如果結點不相等返回True
	hash(node)# 如果未綁定遠程結點則返回一個基於其結點ID的哈希散列,如果綁定了則返回它所代表的遠程結點的ID。
	node[key]# 返回這個結點的這個屬性key的屬性值,如果沒有這個key就返回none。
	node[key]# 添加或設置這個節點的屬性以及屬性值
	len[node]# 返回節點的屬性的數量
	dict[node]# 以字典形式返回節點的所有屬性
	walk(node)# 將結點作爲walk()中的唯一項
	labels()# 返回與這個節點相關聯的全部標籤
	has_label(label)# 如果有這個標籤就返回True
	add_label(label)
	remove_label(label)
	clear_labels()
	update_labels(labels)# 從可迭代標籤中向結點添加多個標籤,如一個標籤list
walk(*walkables) # 按順序遍歷所有提供的參數,產生交替的結點和關係

1.2 Relationship 用於操作關係,有幾個重構的Relationship類

class Relationship(start_node, type, end_node, **properties)# 構建一個關係類型爲type(start_node)-[:type]->(end_node)的關係,並且設置關係的屬性。
class Relationship(start_node, end_node, **properties)# 構建一個關係類型爲默認爲to(start_node)-[:to]->(end_code)的關係,並且設置關係的屬性,這個默認值可以通過括展關係類來覆蓋
class Relationship(node, type, **properties)# 
class Relationship(node, **properties)
	relationship == other# 如果關係相等則返回True,關係相等是基於開始結點start_node,終止結點end_node,關係類型type;也就是同一組結點之間有着任意相同的關係類型(方向相同,type相同)則認爲這兩關係相等。
	relationship != other # 如果關係不相等,則返回True
	hash(relationship)# 基於開始和結束結點以及type返回一個關係的哈希散列
	relationship[key]# 返回關係屬性key的屬性值,如果爲空就返回None、
	relationship[key] = value
	del relationship[key]
	len(relationship)
	dict(relationship)
	walk(relationship)# 執行一次walk(),按順序返回關係的開始結點,關係自己,和它的結束結點。
	type()# 返回關係的類型

1.3 Properties

Node和Relationship都擴展了PropertyDict類,PropertyDict類本身擴展了Python的內置字典,。這意味着結點和關係都是可以按鍵索引的屬性值的映射類型。
與Neo4j本身一樣,屬性值可能不是None,缺少屬性(即沒有鍵存在)是建模缺少值的慣性方法

class PropertyDict(iterable, **kwargs)
	properties == other#如果在從other中刪除所有None值後,properties等於other,則返回True。
	properties != other
	properties[key] = value
	setdefault(key, default=None)# 如果key在PropertyDict中,則返回它的值。如果沒有,則插入值爲default的鍵並返回default,除非default爲None,在這種情況下不執行任何操作。默認值爲None。
	update(iterable=None, **kwargs)

1.4 Subgraphs

Subgraph(子圖)是結點和關係的集合,構造(construct)子圖最簡單的方法是使用【標準集操作】組合結點和關係。
Subgraph是一組不可變的結點和關係,可以作爲參數提供給許多圖數據函數。
Subgraph 還用作Node、Relationship和Walkable類的基類,允許使用集合操作這些類的實例。

s = ab | ac
print(s)
# {(alice:Person {name:"Alice"}),
#	(bob:Person {name:"Bob"}), 
#	(carol:Person {name:"Carol"},
#	(alice)-[:KNOWS]->(bob), 
#	(alice)-[:WORKS_WITH]->(carol)}
print(s.nodes())
# frozenset({(alice:Person {name:"Alice"}),
#           (bob:Person {name:"Bob"}),
#           (carol:Person {name:"Carol"})})
print(s.relationships()
#frozenset({(alice)-[:KNOWS]->(bob),
#           (alice)-[:WORKS_WITH]->(carol)})
class Subgraph(nodes,relationships)
	subgraph | other |...# Union.將子圖取並集,並在一起,返回一個全新的子圖,去除重複實體。
	subgraph & other &...# Intersection.將子圖取交集。
	subgraph - other -...# Difference.返回一個新的子圖,類似減法,但對關係的減法不太一樣,其中刪除掉在other子圖中與subgraph中都有的結點和關係,而如果刪除subgraph中的關係時,與這個關係相連的任何結點即使不在這個子圖中,也要全部刪除。
	subgraph ^ other ^...# Symmetric difference.返回一個新的子圖,類似於異或,找出每個子圖中不在其他子圖中存在的結點和關係,也包含與這個關係相連的所有節點,即使這些結點在子圖或其他子圖中。
	subgraph.keys()# 返回一個集合包括子圖中所有的結點和關係的屬性
	subgraph.labels()# 返回一個集合包含子圖中所有節點的標籤
	subgraph.nodes()# 返回一個集合包含所有子圖的節點
	subgraph.relationships()# 返回一個集合包含子圖的所有關係
	subgraph.types()# 返回一個集合包含子圖的所有關係的類型type

order(subgraph)# 返回子圖的結點的數量,這參數可以是子圖的實例,也可以是任何子圖派生類的實例,比如Path。
size(subgraph)# 返回子圖的關係的數量,這參數可以是子圖的實例,也可以是任何子圖派生類(derived class)的實例,比如Path。

1.5 Path objects and Walkable Types

Walkable是一個添加了遍歷(traversal)信息的子圖。構建Walkable的最簡單方法是連接(concatenating)其他圖形對象。

w = ab +Relationship(b,'likes',c)+ac
w # (alice)-[:KNOWS]->(bob)-[:LIKES]->(carol)<-[:WORKS_WITH]-(alice)

遍歷Walkable對象可以通過walk()函數,該函數生成可交替的結點和關係,始終以結點開始和結束。任何結點和關係都可以在任何方向上遍歷一遍或多遍。

class Walkable(iterable)
	walkable + other +...# concatenation(連接).類似於成語接龍。返回一個新的Walkable包含一個對Walkable的walk()並緊接着other的walk()。這種可以連接當且僅當walkable的結束結點是other Walkable的開始結點,或者walkable的開始結點是other Walkable的結束結點。
	walk(walkable)# 運行Walkable的walk()函數,生成交替的結點和關係。
	start_node()# 返回這個對象通過walk()函數的第一個結點。
	end_node()# 返回這個對象通過walk()函數的最後一個結點。
	nodes()# 返回這個walkable通過walk()函數的按順序的結點元組。
	relationships()# 返回這個walkable通過walk()函數的按順序的關係元組。
class Path(*entities)# Path是一種walkable的類型,由一些Cypher查詢返回。
walk(*walkables)# 按順序遍歷所有提供的參數,生成交替的結點和關係。

1.6 Record objects

Record 對象保存一個有序的,鍵控的集合,它在很多方面類似於被命名的元組(tuple),但只允許通過括號語法訪問字段,並提供更多功能。Record擴展了元組和映射,每個元組元素被映射在鍵上。

class py2neo.data.Record(iterable=)
	record[index]
	record[key]# 通過特定的鍵key或索引index返回值
	len(record)# 返回record的字段數
	dict(record)# 返回記錄的字典格式
	data(*keys)# 以鍵值對的形式返回一個字典,只會選擇*key或*index與其對應的值,如果*key中有key不在record中,依然會作爲返回值,不過其值設爲None;*index如果超出範圍會報錯。
	get(key,default=None)# 從record中按照鍵key或者索引index獲取一個值,如果這個項不存在,則按默認值返回。
	index(key)# 返回鍵的index
	items(*keys)# 將記錄的字段作爲鍵列表和值元組返回,參數是項的鍵keys或indexs,如果爲空,就全部包括,返回值是(key,value)元組的列表
	keys()# 返回記錄的鍵keys
	to_subgraph()# 返回包含所有此記錄中所有圖形結構的union的子圖。返回的是Subgraph對象。
	values(*keys)# 返回記錄的值,根據索引或鍵選擇過濾以只包含某些值。

1.7 Table objects

Table保存一個Record的列表,通常作爲Cypher查詢的結果接收。它提供了一個方便的容器來完整地處理結果,並提供了轉換成各種輸出格式的方式,Table extends list。

class py2neo.data.Table(records, keys=None)
	repr(table)# 返回用的ASCII碼錶示此table的字符串。在內部這個方法通過header=True調用writer(),將輸出寫入一個 io.StringIO 實例。
	_repr_html_()# 返回用HTML表示的table的字符串。這個方法是用於jupyter notebook去在本地瀏覽器上展示。在內部這個方法通過header=True調用writer()將輸出寫入一個 io.StringIO 實例。
	keys()# 返回這個表的字段的列表
	field(key)# 以字典形式返回一個給定字段的元數據。元數據包括以下內容 type:表示字段值的單個類或者類classes的元組,numeric:如果所有字段是一個數字類型就爲True,否則爲False,optional:如果任意字段都爲None,則爲True,否則爲False。
	write(file=None, header=None, skip=None, limit=None, auto_align=True, padding=1, separator='|', newline='\r\n')# 將數據寫人們可讀的ASCII表中。
	# file:能夠接收輸出的類似文件的對象;
	# header:布爾型,用於添加列標題;
	# skip:在輸出之前要跳過的記錄數;
	# limit:要輸出的記錄的最大數;
	# auto_align:如果爲真,右對齊數值;
	# padding:要在分割符之間包含的空格數;
	# seperetor:列分割符;
	# newline:換行符;
	#返回值爲在輸出中記錄的數量
	write_html(file=None,header=None,skip=None,limit=None,auto_align=True)# 將數據寫入HTML表
	write_separated_values(separator, file=None, header=None, skip=None, limit=None, newline='\r\n', quote='"')# 將數據寫入分隔符分隔的文件
	# quote:引用符
	write_csv(file=None, header=None, skip=None, limit=None)#將數據編寫 爲rfc4180兼容的逗號分割符。
	write_tsv(file=None, header=None, skip=None, limit=None)# 將數據寫入爲製表符分隔的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章