CentOS 7.3上图数据库Neo4j的安装和测试

本文档将介绍在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, cypher, 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查看:

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值