Neo4j安裝+Python操作Neo4j

一贝润、Neo4j安裝及服務(wù)啟動(dòng)

Neo4j 是目前最流行的圖形數(shù)據(jù)庫绊茧,支持完整的事務(wù),圖形數(shù)據(jù)庫也就意味著它的數(shù)據(jù)并非保存在表或集合中打掘,而是保存為節(jié)點(diǎn)以及節(jié)點(diǎn)之間的關(guān)系华畏。圖是由頂點(diǎn)(Vertex),邊(Edge)和屬性(Property)組成的尊蚁,頂點(diǎn)和邊都可以設(shè)置屬性亡笑,頂點(diǎn)也稱作節(jié)點(diǎn),邊也稱作關(guān)系横朋,每個(gè)節(jié)點(diǎn)和關(guān)系都可以有一個(gè)或多個(gè)屬性仑乌。

1、Neo4j安裝

[Windows平臺(tái)安裝] (https://www.cnblogs.com/ljhdo/archive/2017/05/19/5521577.html)
[Linux平臺(tái)安裝] (https://blog.csdn.net/qq_21383435/article/details/79557819)

2、啟動(dòng)配置

Neo4j應(yīng)用程序有如下主要的目錄結(jié)構(gòu):

bin/ -->Neo4j可執(zhí)行程序
      cypher-shell    --> 操作Cypher的程序
      neo4j   --> 服務(wù)端程序
      neo4j-admin  -->管理工具晰甚,設(shè)置命令衙传,數(shù)據(jù)恢復(fù)等功能。
      neo4j-backup  -->熱備份工具(只有企業(yè)版支持)
      neo4j-import    -->數(shù)據(jù)導(dǎo)入導(dǎo)出工具
conf/  -->配置文件目錄
      neo4j.conf   -->控制Neo4j啟動(dòng)的配置文件
data/  -->數(shù)據(jù)庫文件目錄
      databases/ 
             graph.db    -->核心數(shù)據(jù)庫文件
plugins/ -->Neo4j的插件

neo4j.conf的常用配置參數(shù)如下

參數(shù) 描述
-dbms.active_database 數(shù)據(jù)庫名字厕九,默認(rèn)graph.db
-dbms.directories.data 數(shù)據(jù)庫路徑(會(huì)自動(dòng)補(bǔ)上databases)
-dbms.memory.heap.initial_size jvm初始堆內(nèi)存
-dbms.memory.heap.max_size jvm最大堆內(nèi)存
-dbms.memory.pagecache.size 類似緩存粪牲,越大越好
-dbms.connectors.default_listen_address 可以遠(yuǎn)程訪問neo4j數(shù)據(jù)庫的ip,0.0.0.0表示不限制

配置介紹
端口和日志介紹

3、服務(wù)開啟與關(guān)閉

(1)Windows下配置
使用WIN+R運(yùn)行cmd命令執(zhí)行進(jìn)入bin目錄下執(zhí)行

neo4j install-service  # 安裝為服務(wù)
neo4j uninstall-service  # 卸載服務(wù)

執(zhí)行如下命令開啟止剖、關(guān)閉腺阳、重啟、狀態(tài)查詢

neo4j start
neo4j stop
neo4j restart
neo4j status

(2)Linux下配置
進(jìn)入安裝目錄下穿香,執(zhí)行如下命令開啟亭引、關(guān)閉、重啟皮获、狀態(tài)查詢

neo4j start
neo4j stop
neo4j restart
neo4j status

4焙蚓、打開Neo4j集成的瀏覽器

Neo4j服務(wù)器具有一個(gè)集成的瀏覽器,在一個(gè)運(yùn)行的服務(wù)器實(shí)例上訪問 “http://localhost:7474/”洒宝,打開瀏覽器购公,顯示啟動(dòng)頁面
默認(rèn)的用戶是neo4j,其默認(rèn)的密碼是:neo4j雁歌,第一次成功登陸到Neo4j服務(wù)器之后宏浩,需要重置密碼。

二靠瞎、py2neo安裝

py2neo 是用來對(duì)接 Neo4j的 Python 庫

pip install py2neo

官方文檔

三比庄、使用py2neo操作neo4j數(shù)據(jù)庫

連接neo4j數(shù)據(jù)庫

from py2neo import Graph,Node,Relationship
# 連接neo4j數(shù)據(jù)庫,輸入地址乏盐、用戶名佳窑、密碼
graph = Graph('http://localhost:7474',username='neo4j',password='test')

1、插入數(shù)據(jù)

創(chuàng)建了兩個(gè)Node以及兩者之間的Relationship父能。在這里有必要提一下神凑,如果建立關(guān)系的時(shí)候,起始節(jié)點(diǎn)或者結(jié)束節(jié)點(diǎn)不存在何吝,則在建立關(guān)系的同時(shí)建立這個(gè)節(jié)點(diǎn)溉委。

# 可以一個(gè)一個(gè)創(chuàng)建
a = Node('Person',name='bubu')
graph.create(a)
b = Node('Person',name='kaka')
graph.create(b)
r = Relationship(a,'KNOWS',b)
graph.create(r)
'''
# 也可以一次性創(chuàng)建
s = a | b | r
graph.create(s)
'''

可以通過 setdefault() 方法賦值默認(rèn)屬性(當(dāng)給location賦值了屬性,則它會(huì)把默認(rèn)的屬性覆蓋)

c = Node('City')
c.setdefault('location', '北京')

2岔霸、查詢數(shù)據(jù)

(1)對(duì)Node的查詢
方法一:使用CQL查詢
直接也是最簡(jiǎn)單的方式薛躬,通過數(shù)據(jù)庫語言進(jìn)行尋找,不需要考慮python語法

# graph查詢
graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").data()  # list型
graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").to_data_frame()  # dataframe型
graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").to_table()  # table

方法二:使用NodeMatcher查詢
如果要查詢單個(gè)節(jié)點(diǎn)的話呆细,可以使用 first() 方法

from py2neo import NodeMatcher

matcher = NodeMatcher(graph)
matcher.match("Person", name="Kevin").first()
matcher.match(“Person”, name__not="Rick Astley").first()
描述 后綴 示例
表達(dá)相等 __exact matcher.match(“Person”, name__exact="Kevin Bacon")
表達(dá)不相等 __not matcher.match(“Person”, name__not="Rick Astley")
表達(dá)大于 __gt matcher.match(“Person”, born__gt=1985)
表達(dá)大于等于 __gte matcher.match(“Person”, born__gte=1965)
表達(dá)小于 __lt matcher.match(“Person”, born__lt=1965)
表達(dá)小于等于 __lte matcher.match(“Person”, born__lte=1965)
以XX開頭 __startswith matcher.match(“Person”, name__startswith="Kevin")
以XX結(jié)尾 __endswith matcher.match(“Person”, name__endswith="Smith")
包含關(guān)系 __contains matcher.match(“Person”, name__contains="James")

另外也可以使用 NodeMatch.where()進(jìn)行更復(fù)雜的查詢型宝,例如下面的查詢是查出以Kevin開頭的 Person Node(用了正則表達(dá)式匹配查詢)

from py2neo import NodeMatcher

matcher = NodeMatcher(graph)
persons = matcher.match("Person").where("_.name =~ 'Kevin.*' ").order_by("_.name", "max(_.a, _.b)").limit(3)
print(list(persons))

通過len()方法八匠,可統(tǒng)計(jì)查找到節(jié)點(diǎn)的個(gè)數(shù)

from py2neo import NodeMatcher

matcher = NodeMatcher(graph)
nodeNum= len(matcher.match("Person").where('_.name =~ "Kevin.*" '))
print(nodeNum)

(2)對(duì)Relationship的查詢
方法一:使用CQL查詢

方法二:使用RelationshipMatcher查詢

from py2neo import RelationshipMatcher

relMatch = RelationshipMatcher(graph)
relList = list(relMatch.match())
for i in relList:
    print(i)    # 查找圖數(shù)據(jù)庫中所有關(guān)系

語法:match(nodes=None, r_type=None, **properties)
分別對(duì)應(yīng)節(jié)點(diǎn)、關(guān)系名趴酣、屬性

from py2neo import RelationshipMatcher

relMatch = RelationshipMatcher(graph)
relList = list(relMatch.match(r_type="女兒"))
for i in relList:
    print(i) 

附錄
中文neo4j資源
CQL查詢語言
py2neo官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梨树,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岖寞,更是在濱河造成了極大的恐慌抡四,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仗谆,死亡現(xiàn)場(chǎng)離奇詭異指巡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隶垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門藻雪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狸吞,你說我怎么就攤上這事勉耀。” “怎么了蹋偏?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵便斥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我威始,道長(zhǎng)枢纠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任字逗,我火速辦了婚禮京郑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葫掉。我一直安慰自己,他們只是感情好跟狱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布俭厚。 她就那樣靜靜地躺著,像睡著了一般驶臊。 火紅的嫁衣襯著肌膚如雪挪挤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天关翎,我揣著相機(jī)與錄音扛门,去河邊找鬼。 笑死纵寝,一個(gè)胖子當(dāng)著我的面吹牛论寨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葬凳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绰垂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起火焰,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤劲装,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昌简,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占业,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年纯赎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谦疾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡址否,死狀恐怖餐蔬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佑附,我是刑警寧澤樊诺,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站音同,受9級(jí)特大地震影響词爬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜权均,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一顿膨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叽赊,春花似錦恋沃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塔橡,卻和暖如春梅割,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葛家。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工户辞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癞谒。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓底燎,卻偏偏與公主長(zhǎng)得像刃榨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子书蚪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 喇澡? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,511評(píng)論 0 4
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)殊校,會(huì)觸發(fā)此異常晴玖。 O...
    我想起個(gè)好名字閱讀 5,307評(píng)論 0 9
  • 和你一起,四季如春为流。
    夏至菌閱讀 190評(píng)論 1 1
  • 睡裙緊緊貼在身上恐怕會(huì)走光一樣就連昨夜敬察,悄悄藏在被子里的壞心思此刻秀睛,也被你壓得干癟以至于清晨,我只能依在門窗莲祸,偷偷...
    立黃昏閱讀 1,044評(píng)論 79 68