解讀Neo4j全新的Python驅(qū)動程序

原文:The World’s Most Amazing Python Driver for Neo4j

作者:Nigel Small

譯者:仲培藝堂竟,關(guān)注數(shù)據(jù)庫領(lǐng)域盒发,糾錯缴挖、尋求報道或者投稿請致郵:zhongpy@csdn.net亲桦。

盡管Neo4j社區(qū)目前已發(fā)布了Java殉摔、PythonJavaScript.NET官方支持的驅(qū)動程序配阵,但其發(fā)展并未停步馏颂。本周,Neo4j發(fā)布驅(qū)動程序py2neo3.1版本棋傍,同時還為Python用戶推出了全新的OGM救拉。

OGM(Object-Graph Mapper)和圖形數(shù)據(jù)庫的關(guān)系,就相當(dāng)于ORM(對象關(guān)系映射)和傳統(tǒng)RDMS之間的關(guān)系:前者都是一個架構(gòu)瘫拣,可供構(gòu)建database-aware領(lǐng)域?qū)ο螅╠omain objects)亿絮。

Py2neo OGM的操作圍繞新的GraphObject類展開。此處其扮演基礎(chǔ)類和管理者的雙重角色:前者限定了領(lǐng)域?qū)ο篝镏簦缓笳邉t支持基礎(chǔ)節(jié)點和使py2neo OGM持久化的相關(guān)平臺派昧。

Movie Graph(和Neo4j預(yù)先打包)為例,以該數(shù)據(jù)集為基礎(chǔ)拢切,模擬一個Person類:

classPerson(GraphObject):

__primarykey__ = "name"

name =Property()born =Property()

此處蒂萎,一個Person類有兩類屬性。而Neo4j的屬性沒有固定類型淮椰,因此五慈,比起典型ORM下的SQL字段,其相關(guān)定義較少主穗。

類屬性和基礎(chǔ)屬性名稱相同:命名和生成泻拦。必要時,其可重定向為不同名屬性忽媒,含表達式例如Property(name="actual_name")争拐。

最終,定義一個主鍵(primarykey)晦雨,指出哪種屬性是pushpull操作的唯一標(biāo)識符架曹;定義一個primarylabel,盡管是默認(rèn)條件闹瞧,仍可用Person代替音瓷。

綜上所述,可以通過一個Cypherstatement夹抗,挑選出一個特定Person對象節(jié)點:

MATCH (a:Person) WHEREa.name = {n}RETURNa

此外绳慎,如果想要在同一個數(shù)據(jù)集內(nèi),模擬Person和Movie漠烧,還有其關(guān)聯(lián)平臺杏愤,可通過以下途徑:

classMovie(GraphObject):? ? __primarykey__ ="title"title =Property()? ? tagline =Property()? ? released =Property()? ? actors = RelatedFrom("Person","ACTED_IN")? ? directors = RelatedFrom("Person","DIRECTED")? ? producers = RelatedFrom("Person","PRODUCED")classPerson(GraphObject):? ? __primarykey__ ="name"name =Property()? ? born =Property()? ? acted_in = RelatedTo(Movie)? ? directed = RelatedTo(Movie)? ? produced = RelatedTo(Movie)

此處包含兩類新屬性:RelatedTo和RelatedFrom。這兩類屬性定義了關(guān)系對象集(連接方式相似)已脓。換句話說珊楼,就是它們共享相同的開始節(jié)點或終止節(jié)點,和共同的關(guān)系類型度液。

以acted_in = RelatedTo(Movie)為例厕宗,它描述了一組Movie關(guān)系節(jié)點集画舌,這些節(jié)點都是通過一個輸出ACTED_IN關(guān)系來連接的。這里要注意的是已慢,和上面提及的屬性命名一樣曲聂,關(guān)系類型也默認(rèn)自動匹配屬性名,只不過此處字母為大寫形式佑惠。相反朋腋,對應(yīng)的反向定義,actors = RelatedFrom("Person", "ACTED_IN")則明指定了關(guān)系名膜楷,以區(qū)分與屬性名的差異旭咽。

為了研究執(zhí)行對象的方法,可以假設(shè)一個情境:需要從數(shù)據(jù)庫中提取出Keanu Reeves赌厅,并將他和經(jīng)典影片Bill & Ted’s Excellent Adventure相連接 (不包含在原始圖當(dāng)中)穷绵。在這種情況下,首先要利用GraphObject類特愿,并通過Person子類選擇演員请垛。隨后,構(gòu)建一個新的Movie對象洽议,并添加到Keanu Reeves參與演出的影片集當(dāng)中宗收。最終,將上述全部信息匯入圖表中亚兄。進程代碼如下:

keanu= Person.select(graph,"Keanu Reeves").first()bill_and_ted = Movie()bill_and_ted.title="Bill & Ted's Excellent Adventure"keanu.acted_in.add(bill_and_ted)graph.push(keanu)

通過一個類似集的端口(提供添加移除方法)混稽,關(guān)系對象支持其父類對象。這些數(shù)據(jù)匯入圖表之后审胚,為了完成操作匈勋,OGM架構(gòu)自動構(gòu)建并運行所有必要的Cypher。

該方法也可用于執(zhí)行其它更復(fù)雜的選擇膳叨。Where

method可利用所有WHERE

子句中的expression洽洁。比如要輸出所有名字首字母是“K”的演員,操作如下:

forpersoninPerson.select(graph).where("_.name =~ 'K.*'"):print(person.name)

注意:此處用到下劃線字符來指代待匹配節(jié)點菲嘴。

Py2neo文檔還包含很多其它信息饿自,且GitHub知識庫當(dāng)中還有一個演示應(yīng)用程序,該程序展示了一個微型movie瀏覽器(截圖如下)當(dāng)中龄坪,一切是如何運行的昭雌。

2016年8月12日-13日,由CSDN重磅打造的互聯(lián)網(wǎng)應(yīng)用架構(gòu)實戰(zhàn)峰會健田、運維技術(shù)與實戰(zhàn)峰會將在成都舉行烛卧,目前18位講師和議題已全部確認(rèn)。兩場峰會大牛講師來自阿里妓局、騰訊总放、百度呈宇、京東、小米局雄、樂視甥啄、聚美優(yōu)品、YY哎榴、華為型豁、360等知名互聯(lián)網(wǎng)公司僵蛛,共同探討高可用/高并發(fā)/高性能系統(tǒng)架構(gòu)設(shè)計尚蝌、電商架構(gòu)、分布式架構(gòu)充尉、運維工具研發(fā)與實踐飘言、運維自動化系統(tǒng)的構(gòu)建、大數(shù)據(jù)與運維驼侠、云上的運維案例分析姿鸿、虛擬化技術(shù)、應(yīng)用性能檢測與管理倒源、游戲行業(yè)的運維實踐等苛预,將和與會嘉賓共同探討「構(gòu)建更安全、更高性能笋熬、更穩(wěn)定的架構(gòu)和運維體系」等領(lǐng)域的話題與技術(shù)热某。【目前限時6折胳螟,點擊這里搶票】

7月15日24點前仍處于最低六折優(yōu)惠票價階段昔馋,單場峰會(含餐)門票只需499元,5人以上團購或者購買兩場峰會通票更有特惠糖耸,限時折扣秘遏,預(yù)購從速。(票務(wù)詳情鏈接)嘉竟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邦危,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舍扰,更是在濱河造成了極大的恐慌铡俐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妥粟,死亡現(xiàn)場離奇詭異审丘,居然都是意外死亡,警方通過查閱死者的電腦和手機勾给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門滩报,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锅知,“玉大人,你說我怎么就攤上這事脓钾∈鄱茫” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵可训,是天一觀的道長昌妹。 經(jīng)常有香客問我,道長握截,這世上最難降的妖魔是什么飞崖? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮谨胞,結(jié)果婚禮上固歪,老公的妹妹穿的比我還像新娘。我一直安慰自己胯努,他們只是感情好牢裳,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叶沛,像睡著了一般蒲讯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灰署,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天判帮,我揣著相機與錄音,去河邊找鬼氓侧。 笑死脊另,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的约巷。 我是一名探鬼主播偎痛,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼独郎!你這毒婦竟也來了踩麦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氓癌,失蹤者是張志新(化名)和其女友劉穎谓谦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贪婉,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡反粥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片才顿。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡莫湘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郑气,到底是詐尸還是另有隱情幅垮,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布尾组,位于F島的核電站忙芒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讳侨。R本人自食惡果不足惜呵萨,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爷耀。 院中可真熱鬧甘桑,春花似錦拍皮、人聲如沸歹叮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咆耿。三九已至,卻和暖如春爹橱,著一層夾襖步出監(jiān)牢的瞬間萨螺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工愧驱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慰技,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓组砚,卻偏偏與公主長得像吻商,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糟红,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 寫在前面 從去年找工作結(jié)束之后艾帐,就一直沒有再寫博文了,不知不覺已經(jīng)過去大半年了T_T盆偿。鳥哥也從學(xué)校正式步入職場柒爸,開...
    niaoge2016閱讀 2,230評論 0 6
  • 概要 之前在CSDN上寫過一個blog(http://blog.csdn.net/wrzcy/article/de...
    Gun_Fox閱讀 67,025評論 19 44
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)事扭,斷路器捎稚,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 有人說青春是苦澀的,有人說青春是甜蜜的,也有人說青春是酸爽的今野。但不管怎么說晰奖,怎么想,青春都是我們老去后最值得回憶的...
    RainBowey丶閱讀 296評論 1 7
  • 火紅的楓葉墜落入湖腥泥,淡淡的水波蕩漾開匾南。紅芒奪目。 他站在大街中央蛔外,人來人往蛆楞。濕潤的氣流穿過廣闊的太平洋,化為淅淅瀝...
    弗雷月閱讀 348評論 0 2