本文档将介绍在CentOS 7.3上部署图数据库Neo4j,包括使用Python访问Neo4j图数据库。

步骤一:安装JDK(略)

步骤二:安装Python 2.7版本

[root@openstack-node1 tmp]# python -V
Python 2.7.5


步骤三:安装neo4j

[root@openstack-node1 tmp]# cd /tmp
[root@openstack-node1 tmp]# wget http://debian.neo4j.org/neotechnology.gpg.key
[root@openstack-node1 tmp]# rpm --import neotechnology.gpg.key
[root@openstack-node1 tmp]# cat <<EOF > /etc/yum.repos.d/neo4j.repo
> [neo4j]
> name=Neo4j Yum Repo
> baseurl=http://yum.neo4j.org/stable
> enabled=1
> gpgcheck=1
> EOF
 
[root@openstack-node1 tmp]# yum install neo4j  -y


步骤三:安装Python的接口驱动去访问Neo4j

[root@openstack-node1 tmp]# yum -y install epel-release
[root@openstack-node1 tmp]# yum -y install python-pip
[root@openstack-node1 tmp]# pip install neo4j-driver
[root@openstack-node1 tmp]# pip install --upgrade pip


步骤四:启动Neo4j

[root@openstack-node1 tmp]# neo4j --help 
Usage: neo4j { console | start | stop |restart | status | version }
[root@openstack-node1 tmp]# neo4j console
Active database: graph.db
Directories in use:
 home:         /var/lib/neo4j
 config:       /etc/neo4j
 logs:         /var/log/neo4j
 plugins:     /var/lib/neo4j/plugins
 import:      /var/lib/neo4j/import
  data:         /var/lib/neo4j/data
 certificates: /var/lib/neo4j/certificates
 run:          /var/run/neo4j
Starting Neo4j.
……


安装好以后,在控制台启动Neo4j,然后打开浏览器访问http://192.168.1.11:7474/ ,就可以查看Neo4j服务了。

登录图数据库的时候使用默认的用户名和密码(neo4j)连接,连接成功后需要修改neo4j的默认密码。

步骤五:运行Python测试用例

Neo4j支持一种叫做cypher的图查询语言,这里定义一个执行cypher的函数,然后调用插入一些测试数据,代码如下:

# !/usr/bin/python 
# -*- coding: utf-8 -*- 
 
 
"""
create_author : jiangshouzhuang
create_time   : 2017-06-07
program       : *_* Read and Write Neo4j *_*
""" 
 
from neo4j.v1 import GraphDatabase 
 
class Neo4jHandler: 
   """
   Handler of graph database Neo4j reading and writing.
   """ 
   def __init__(self,driver): 
       """
       Get Neo4j server driver.
       :param driver: driver object
           A driver object holds the detail of a Neo4j database including serverURIs,credentials and other configuration,see
           " http://neo4j.com/docs/api/python-driver/current/driver.html".
       """ 
       self.driver = driver 
 
   def __repr__(self): 
       printer = 'o(>﹏<)o ......Neo4j old driver "{0}" carry me fly......o(^o^)o'.format(self.driver) 
       return printer 
 
   def listreader(self,cypher,keys): 
       """
       Read data from Neo4j in specified cypher.
       Read and parse data straightly from cypher field result.
       :param cypher: string
           Valid query cypher statement.
       :param keys: list
           Cypher query columns to return.
       :return: list
           Each returned record constructs a list and stored in a big list,[[...],[...],...].
       """ 
       with self.driver.session() as session: 
           with session.begin_transaction() as tx: 
                data = [] 
                result = tx.run(cypher) 
                for record in result: 
                    rows = [] 
                    for key in keys: 
                        rows.append(record[key]) 
                    data.append(rows) 
                return data 
 
   def dictreader(self,cypher): 
       """
       Read data from Neo4j in specified cypher.
       The function depends on constructing dict method of dict(key = value) andany error may occur if the "key" is invalid to Python.
       you can choose function dictreaderopted() below to read data by hand(viathe args "keys").
       :param cypher: string
           Valid query cypher statement.
       :return: list
           Each returned record constructs a dict in "key : value" pairsand stored in a big list,[{...},{...},...].
       """ 
       with self.driver.session() as session: 
           with session.begin_transaction() as tx: 
                data = [] 
                for record intx.run(cypher).records(): 
                    item = {} 
                    for args instr(record).split('>')[0].split()[1:]: 
                        exec"item.update(dict({0}))".format(args) 
                    data.append(item) 
                return data 
 
   def dictreaderopted(self,keys=None): 
       """
       Optimized function of dictreader().
       Read and parse data straightly from cypher field result.
        :param cypher: string
           Valid query cypher statement.
       :param keys: list,default : none(call dictreader())
           Cypher query columns to return.
       :return: list.
           Each returned record constructs an dict in "key : value" pairsand stored in a list,...].
       """ 
       if not keys: 
           return self.dictreader(cypher) 
       else: 
           with self.driver.session() as session: 
                with session.begin_transaction()as tx: 
                    data = [] 
                    result =tx.run(cypher) 
                    for record in result: 
                        item = {} 
                        for key in keys: 
                            item.update({key :record[key]}) 
                        data.append(item) 
                    return data 
 
   def cypherexecuter(self,cypher): 
       """
       Execute manipulation into Neo4j in specified cypher.
       :param cypher: string
           Valid handle cypher statement.
       :return: none.
       """ 
       with self.driver.session() as session: 
           with session.begin_transaction() as tx: 
                tx.run(cypher) 
        session.close() 
 
 
# self test 
if __name__ == "__main__": 
   uri = "bolt://192.168.1.11:7687" 
   driver = GraphDatabase.driver(uri,auth=("neo4j","zhangyun")) 
   MyNH = Neo4jHandler(driver) 
   print(MyNH) 
   cypher_exec = """
                    CREATE (Neo:Crew{name:'Neo'}),(Morpheus:Crew{name: 'Morpheus'}),(Trinity:Crew {name:'Trinity'}),(Cypher:Crew:Matrix{name: 'Cypher'}),(Smith:Matrix {name:'Agent Smith'}),(Architect:Matrix{name:'The Architect'}),(Neo)-[:KNowS]->(Morpheus),(Neo)-[:lovES]->(Trinity),(Morpheus)-[:KNowS]->(Trinity),(Morpheus)-[:KNowS]->(Cypher),(Cypher)-[:KNowS]->(Smith),(Smith)-[:CODED_BY]->(Architect)
                  """  # "example cypher statement fromhttp://console.neo4j.org/" 
   cypher_read = """
                    MATCH (a)-[:KNowS|lovES]-> (b:Crew {name: 'Trinity'})
                    RETURN a.name AS l,b.nameAS r
                  """ 
   MyNH.cypherexecuter(cypher_exec) 
   print(MyNH.listreader(cypher_read,['l','r'])) 
   print(MyNH.dictreader(cypher_read)) 
print(MyNH.dictreaderopted(cypher_read,['l']))


将上述的代码保存到本地的文件中,比如neo4j_python_example.py,然后运行:

[root@openstack-node1 neo4j]# pythonneo4j_python_example.py
o(>﹏<)o ......Neo4jold driver "<neo4j.v1.direct.DirectDriver object at0x7f87bcc6eed0>" carry me fly...... o(^o^)o
[[u'Morpheus',u'Trinity'],[u'Neo',u'Trinity']]
[{'r': u'Trinity','l': u'Morpheus'},{'r':u'Trinity','l': u'Neo'}]
[{'l': u'Morpheus'},{'l': u'Neo'}]


然后再登录Neo4j查看:

CentOS 7.3上图数据库Neo4j的安装和测试的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  3. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  4. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  5. ios – 如何将视频从AVAssetExportSession保存到相机胶卷?

    在此先感谢您的帮助.解决方法只需使用session.outputURL=…

  6. ios – 使用AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto拉伸捕获的照片

    解决方法所以我解决了我的问题.这是我现在使用的代码,它工作正常:…重要的输出imagaView:一些额外的信息:相机图层必须是全屏,并且outputimageView也必须是.我希望这些对某些人来说也是有用的信息.

  7. 我可以在iOS中自定义Twitter工具包的登录按钮吗?

    我已经下载了Twitter工具包框架并添加了用Twitter登录的代码.但是,我不希望登录按钮看起来像那样.我想要一个用于登录的自定义按钮.我能这样做吗?我只想使用这个框架,因为这也适用于iOS系统帐户.解决方法根据document:在按下按钮中添加代码:Objective-C的迅速

  8. ios – AVCaptureSession条形码扫描

    解决方法以下是我所拥有的项目代码示例,可以帮助您走上正确的轨道

  9. ios – 如何在Watch OS 2中引用不支持的框架

    有没有办法将框架链接到扩展名?

  10. ios7 – 在iOS 7中设置Alamofire中的自定义HTTP标头不工作

    解决方法我得到它的工作这对iOS7没有影响:然而,这将适用于iOS7和8:

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部