B^B .. Oh

一群爱搞事情的小弱鸡

py2neo : Python 操作 Neo4j 数据库

Neo4j是一个世界领先的开源图形数据库,由 Java 编写。图形数据库也就意味着它的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。

Neo4j 的数据由下面几部分构成:

  • 节点
  • 属性

Neo4j 除了顶点(Node)和边(Relationship),还有一种重要的部分——属性。无论是顶点还是边,都可以有任意多的属性。属性的存放类似于一个 HashMap,Key 为一个字符串,而 Value 必须是基本类型或者是基本类型数组。

在Neo4j中,节点以及边都能够包含保存值的属性,此外:

  • 可以为节点设置零或多个标签(例如 Author 或 Book)
  • 每个关系都对应一种类型(例如 WROTE 或 FRIEND_OF)
  • 关系总是从一个节点指向另一个节点(但可以在不考虑指向性的情况下进行查询)

Neo4j的特点

  • 它拥有简单的查询语言 Neo4j CQL
  • 它遵循属性图数据模型
  • 它通过使用 Apache Lucence 支持索引
  • 它支持 UNIQUE 约束
  • 它包含一个用于执行 CQL 命令的 UI:Neo4j 数据浏览器
  • 它支持完整的 ACID(原子性,一致性,隔离性和持久性)规则
  • 它采用原生图形库与本地 GPE(图形处理引擎)
  • 它支持查询的数据导出到 Json 和 XLS 格式
  • 它提供了 REST API,可以被任何编程语言(如 Java,Spring,Scala 等)访问
  • 它提供了可以通过任何 UI MVC 框架(如 Node JS )访问的 Java 脚本
  • 它支持两种 Java API:Cypher API 和 Native Java API 来开发 Java 应用程序

 

Neo4j安装

可以到官网直接下载安装包安装即可,链接:https://neo4j.com/download/

 

Neo4j CQL命令

Neo4j 的 CQL 是非常重要的命令,类似于 SQL 语句,具体的用法可以参考:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html

 


Py2Neo用法

Py2Neo 是用来对接 Neo4j 的 Python 库,接下来对其详细介绍。

相关链接

安装方法

使用 Pip 安装即可:

pip3 install py2neo

Node & Relationship

Neo4j 里面最重要的两个数据结构就是节点和关系,即 Node 和 Relationship,可以通过 Node 或 Relationship 对象创建,实例如下:

from py2neo import Node, Relationship
 
a = Node('Person', name='Alice')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
print(a, b, r)

运行结果:

(alice:Person {name:"Alice"}) (bob:Person {name:"Bob"}) (alice)-[:KNOWS]->(bob)

这样我们就成功创建了两个 Node 和两个 Node 之间的 Relationship。

Node 和 Relationship 都继承了 PropertyDict 类,它可以赋值很多属性,类似于字典的形式,例如可以通过如下方式对 Node 或 Relationship 进行属性赋值,接着上面的代码,实例如下:

a['age'] = 20
b['age'] = 21
r['time'] = '2017/08/31'
print(a, b, r)

运行结果:

(alice:Person {age:20,name:"Alice"}) (bob:Person {age:21,name:"Bob"}) (alice)-[:KNOWS {time:"2017/08/31"}]->(bob)

可见通过类似字典的操作方法就可以成功实现属性赋值。

另外还可以通过 setdefault() 方法赋值默认属性,例如:

a.setdefault('location', '北京')
print(a)

运行结果:

(alice:Person {age:20,location:"北京",name:"Alice"})

可见没有给 a 对象赋值 location 属性,现在就会使用默认属性。

但如果赋值了 location 属性,则它会覆盖默认属性,例如:

a['location'] = '上海'
a.setdefault('location', '北京')
print(a)

运行结果:

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注