欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python中使用Neo4j的方法

 更新時間:2019年03月14日 08:52:38   作者:mishidemudong  
今天小編就為大家分享一篇關(guān)于在Python中使用Neo4j的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

Neo4j是面向?qū)ο蠡贘ava的 ,被設(shè)計為一個建立在Java之上、可以直接嵌入應(yīng)用的數(shù)據(jù)存儲。此后,其他語言和平臺的支持被引入,Neo4j社區(qū)獲得持續(xù)增長,獲得了越來越多的技術(shù)支持者。目前已支持.NET、Ruby、Python、Node.js及PHP等。因此,不管是什么項目,沒有理由不引入Neo4j。

本文重點介紹Python,這門語言的哲學(xué)與Java大大不同,同時展示py2neo庫如何被用來建立一個簡單的應(yīng)用程序。

一個快速的REST例子

首先來看些基本知識。如果沒有服務(wù)API,Neo4j就不能支持其他語言。該接口提供一組基于JSON消息格式的RESTful Web服務(wù)和一個全面的發(fā)現(xiàn)機制。使用中使用這個接口的最快和最容易的方法是通過使用cURL:

$ curl http://localhost:7474/db/data/
{ 
 "extensions" : { 
 }, 
 "node" : "http://localhost:7474/db/data/node", 
 "node_index" : "http://localhost:7474/db/data/index/node", 
 "relationship_index" : "http://localhost:7474/db/data/index/relationship", 
 "extensions_info" : "http://localhost:7474/db/data/ext", 
 "relationship_types" : "http://localhost:7474/db/data/relationship/types", 
 "batch" : "http://localhost:7474/db/data/batch", 
 "cypher" : "http://localhost:7474/db/data/cypher", 
 "transaction" : "http://localhost:7474/db/data/transaction", 
 "neo4j_version" : "2.0.0-M03" 
}

從這個端點返回JSON對象包含一組資源名稱和URI下可以找到的Cypher端點。在消息載荷中接受傳送來的Cyper請求并執(zhí)行這些查詢,在HTTP響應(yīng)中返回結(jié)果。

正是這種REST API接口,使得現(xiàn)在已有的各種Neo4j驅(qū)動得以建立。py2neo提供了這些REST資源的簡單封裝,這使Python應(yīng)用程序開發(fā)者可以放心使用Neo4j而不用考慮底層的客戶機-服務(wù)器協(xié)議。

一個簡單的應(yīng)用

為實際驗證py2neo,我們將著眼于建立一個簡單的用于存儲姓名和電子郵件地址的通訊錄管理系統(tǒng)。我們自然會使用節(jié)點來模擬每一個獨立實體,但它是要記住,Neo4j沒有類型的概念。類型是從周圍的關(guān)系和屬性推斷來的。

下面的關(guān)系圖中人顯示為紅色、電子郵件地址節(jié)點顯示為藍色。這些當(dāng)然是純粹的邏輯演示節(jié)點,但數(shù)據(jù)本身并沒有區(qū)別。

我們的應(yīng)用程序?qū)⑼瓿蓛蓚€功能:添加新的聯(lián)系人信息和檢索聯(lián)系人的完整列表。為此,我們將創(chuàng)建一個Person類包裝Py2neoNodeobject,這使我們有一個底層處理的實現(xiàn)且留出用戶級的功能。上圖中的ROOT節(jié)點是指上圖中一個固定的參考點,我們沿著這個點開始。

讓我們直接看看代碼。下面是一個完整的小型應(yīng)用。這個程序允許添加新的名字與一個或者更多email地址相連接的以及提供了一個容易的方式來顯示這些連接信息的一個命令行工具。沒有參數(shù)的運行是顯示使用模式,而且這個唯一的依賴只是需要一個本地未修改的Neo4j實例(instance)而已。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from
__future__
import
print_function
import
sys
from
py2neo
import
neo4j,
node,
rel
graph_db
=
neo4j.GraphDatabaseService()
class
Person(object):
  _root
=
graph_db.get_or_create_indexed_node("reference",
"contacts",
"root")
  @classmethod
  def
create(cls,
name,
*emails):
    person_node,
_
=
graph_db.create(node(name=name),
       rel(cls._root,
"PERSON",
0))
    for
email
in
emails:
      graph_db.create(node(email=email),
rel(cls._root,
"EMAIL",
0),
         rel(person_node,
"EMAIL",
0))
    return
Person(person_node)
  @classmethod
  def
get_all(cls):
    return
[Person(person.end_node)
for
person
in
       cls._root.match("PERSON")]
  def
__init__(self,
node):
    self._node
=
node
  def
__str__(self):
    return
self.name
+
"\n"
+
"\n".join(" <{0}>"
.format(email)
for
email
in
self.emails)
  @property
  def
name(self):
    return
self._node["name"]
  @property
  def
emails(self):
    return
[rel.end_node["email"]
for
rel
in  
self._node.match("EMAIL")]
if
__name__
==
"__main__":
  if
len(sys.argv)
<
2:
    app
=
sys.argv[0]
    print("Usage:
 {0} add <name> <email>
       [<email>...]".format(app))
    print("   
 {0} list".format(app))
    sys.exit()
  method
=
sys.argv[1]
  if
method
==
"add":
    print(Person.create(*sys.argv[2:]))
  elif
method
==
"list":
    for
person
in
Person.get_all():
      print(person)
  else:
print("Unknown
 command")

在第09行上是第一行Py2neo代碼,用來創(chuàng)建了一個GraphDatabaseService對象。通過這個,我們就可以訪問使用Neo4j server的大多數(shù)功能。可選一個URI傳遞到這個構(gòu)造器里,盡管如果什么都沒有提供,代而取之的是使用默認(rèn)的本地參數(shù)。也就是說下面兩行是完全相等的:

graph_db
=
neo4j.GraphDatabaseService()
graph_db
=
neo4j.GraphDatabaseService
(http://localhost:7474/db/data/)

第13行介紹了調(diào)用了get_or_create_indexed_node,它提供一種在圖形里創(chuàng)建固定引用點的漂亮方式。傳統(tǒng)的Neo4j索引允許節(jié)點和關(guān)系通過鍵值對訪問,而在這個代碼里我們使用了帶連接的關(guān)鍵字和root值的引用索引實例。在第一次執(zhí)行時,會創(chuàng)建一個新的節(jié)點,而且在隨后的執(zhí)行中,這個節(jié)點(即root)會復(fù)用(reused)。

在第17行,我們看見了推薦的節(jié)點和關(guān)系抽象的標(biāo)記,以及接受和使用節(jié)點和關(guān)系抽象的create方法。任意多的抽象都可以被傳遞到這個方法中,并且在單個批處理轉(zhuǎn)換中創(chuàng)建實體并以指定它們的順序作為一個列表返回。抽象節(jié)點用節(jié)點函數(shù)表示并帶有一些屬性,然而抽象關(guān)系使用rel函數(shù)接受一個起始節(jié)點,類型和終止節(jié)點。上下文中,其他節(jié)點,關(guān)系起始和終止節(jié)點可能整合引用到在其他批處理中其他節(jié)點。在我們的例子中,我們把根節(jié)點連接到新創(chuàng)建的person節(jié)點,否則就作為項目0(item 0)了。

這次我們在第24行和38行上以match方法形式和關(guān)系見面[@Lesus 注: oschina代碼行數(shù)有問題。對應(yīng)于本文的第28和44行]。它試圖使用一個特殊的條件集合(set)標(biāo)識關(guān)系,然后使用列表(list)返回它們。這這些示例中,這個關(guān)系和PERSON關(guān)系相匹配,從root節(jié)點和EMAIL關(guān)系開始到所給定的person節(jié)點。和Cypher很相似,用來查詢包含MATCH關(guān)鍵字的場景。

最后值得注意的一點是在上面的代碼中訪問節(jié)點屬性的方式只是其中一種簡單的方式。Py2neo重寫了標(biāo)準(zhǔn)python的__getitem__和 __setitem__方法,通過方括號標(biāo)識來方便訪問任何屬性。這點在第34和38行上可以看到。[@Lesus 注:對應(yīng)于本文的第39和44行]

小結(jié)

在那里(代碼行34和38)我們這樣做了,這顯示了它是如何快速簡易地在JAVA環(huán)境之外拼湊出一個Neo4j應(yīng)用程序,也顯示了Py2neo是如何通過REST API來抽象出大多數(shù)沉重的負(fù)擔(dān)。這里的例子并沒有解決唯一性,盡管功能上提供了唯一索引和Cypher CREATE UNIQUE語句。Django開發(fā)者可能也想要考慮一個層,如Neomodel,它在Py2neo頂層上表示了一個Djangoesque ORM-style 層。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • python實現(xiàn)幾種歸一化方法(Normalization Method)

    python實現(xiàn)幾種歸一化方法(Normalization Method)

    這篇文章主要介紹了python實現(xiàn)幾種歸一化方法(Normalization Method),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python檢查端口是否打開的七種方法總結(jié)

    Python檢查端口是否打開的七種方法總結(jié)

    在信息安全領(lǐng)域,端口掃描是一項常見的技術(shù),用于逐個檢測目標(biāo)主機上的端口是否開放,這篇文章主要給大家介紹了關(guān)于Python檢查端口是否打開的七種方法總結(jié),需要的朋友可以參考下
    2023-12-12
  • python?json-rpc?規(guī)范源碼閱讀

    python?json-rpc?規(guī)范源碼閱讀

    這篇文章主要為大家介紹了python?json-rpc?規(guī)范的源碼閱讀,以及jsonrpcclient與jsonrpcserver的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • PyQt5+Pycharm安裝和配置圖文教程詳解

    PyQt5+Pycharm安裝和配置圖文教程詳解

    這篇文章主要介紹了PyQt5+Pycharm安裝和配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python為什么要安裝到c盤

    python為什么要安裝到c盤

    在本篇文章里小編給大家整理的是一篇關(guān)于python安裝到c盤的原因的文章,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-07-07
  • Python打開與讀取文件操作的常用方法

    Python打開與讀取文件操作的常用方法

    這篇文章主要介紹了Python打開與讀取文件操作的常用方法,通過編寫代碼自動化操作文件,讀寫文件、打開文件、寫入文件、刪除文件一系列都稱作為電腦的操作,需要的朋友可以參考下
    2023-07-07
  • 一小時學(xué)會TensorFlow2之基本操作1實例代碼

    一小時學(xué)會TensorFlow2之基本操作1實例代碼

    這篇文章主要介紹了TensorFlow2的基本操作第一節(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • VScode編寫第一個Python程序HelloWorld步驟

    VScode編寫第一個Python程序HelloWorld步驟

    VScode是微軟去年推出的一款輕量級編輯器,功能上和Atom、Sublime Text、Vim類似,你可以通過配置將它打造成合適的IDE,這里簡單介紹一下,需要的朋友可以參考下
    2018-04-04
  • 詳解運行Python的神器Jupyter Notebook

    詳解運行Python的神器Jupyter Notebook

    如果我們想要運行Python,就是在Python或者IPython的解釋器環(huán)境中進行交互式運行,或者程序員最喜歡的編寫.py文件,在文件中編寫python代碼,然后運行。如果想寫一篇Python的文章,里面有代碼,還希望代碼在當(dāng)前頁面運行,那就是使用我們今天要介紹的Jupyter Notebook。
    2021-06-06
  • python中的編碼知識整理匯總

    python中的編碼知識整理匯總

    這篇文章主要介紹了python中的編碼知識整理匯總的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評論