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安装

Neo4j CQL命令

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)

运行结果:

(alice:Person {age:20,location:"上海",name:"Alice"})

另外也可以使用 update() 方法对属性批量更新,接着上面的例子实例如下:

data = {

'name': 'Amy',

'age': 21

}

a.update(data)

print(a)

运行结果:

(alice:Person {age:21,location:"上海",name:"Amy"})

可以看到这里更新了 a 对象的 name 和 age 属性,没有更新 location 属性,则 name 和 age 属性会更新,location 属性则会保留。

Subgraph

Subgraph,子图,是 Node 和 Relationship 的集合,最简单的构造子图的方式是通过关系运算符,实例如下:

from py2neo import Node, Relationship

a = Node('Person', name='Alice')

b = Node('Person', name='Bob')

r = Relationship(a, 'KNOWS', b)

s = a | b | r

print(s)

运行结果:

运行结果:

在这里我们用 NodeSelector 来筛选 age 为 21 的 Person Node,实例如下:

运行结果:

[(d195b2e:Person {age:21,location:"广州",name:"Alice"}), (eefe475:Person {age:21,location:"北京",name:"Mike"})]

在这里用了正则表达式匹配查询。

另外也可以使用 order_by() 进行排序:

from py2neo import Graph, NodeSelector

graph = Graph(password='123456')

selector = NodeSelector(graph)

persons = selector.select('Person').order_by('_.age')

print(list(persons))

运行结果:

[(e3fc3d7:Person {age:21,location:"广州",name:"Alice"}), (da0179d:Person {age:21,location:"北京",name:"Mike"}), (cafa16e:Person {age:22,location:"上海",name:"Bob"})]

前面返回的都是列表,如果要查询单个节点的话,可以使用 first() 方法,实例如下:

结语

neo4j python_Python 操作 Neo4j 数据库!相关推荐

  1. 数据的入库操作 实验python_python操作MySQL数据库

    MySQLdb呢,其实和Python内置的sqlite3的使用方法基本相同. 警告: 不要使用字符串拼接生成SQL语句,否则可能产生SQL注入的问题.应当使用 execute() 的第二个参数检查输入 ...

  2. mongobd python_Python操作MongoDB数据库PyMongo库使用方法

    引用PyMongo 复制代码 代码如下: >>> import pymongo 创建连接Connection 复制代码 代码如下: >>> import pymon ...

  3. neo4j cypher操作

    neo4j cypher操作 文章目录 neo4j cypher操作 neo4j CMD命令 前言 1增加 1.1 增加节点 1.2 查询节点 2 关系 2.1 创建关系 2.2 查询关系 3 删除 ...

  4. python 基于CQL操作neo4j数据库

    本文核心思想: 在python上通过CQL语句来对neo4j数据库进行操作 引言 这篇文章是基于 neo4j 数据库的原生语法 CQL (这里可以理解为mysql里的sql语句),来对neo4j数据库 ...

  5. Python操作Neo4j图数据库的两种方式

    Python操作Neo4j图数据库的两种方式 前言 1. 用neo4j模块执行CQL ( cypher ) 语句 2. 用py2neo模块通过操作python变量,达到操作neo4j的目的 3. 用p ...

  6. Pyhton操作Neo4j图数据库实践(南北朝隋唐历史北朝主要人物知识图谱)

    独孤信"第一岳父"之称很形象,他有三个女儿做了三个朝代皇后,以及杨坚.杨广.李渊等人关系.本文试着使用图数据库(neo4j)表达这段南北朝隋唐历史北朝主要人物知识图谱. 1. Ne ...

  7. py2neo操作图数据库neo4j

    1.概念 图:数据结构中的图由节点和其之间的边组成.节点表示一个实体,边表示实体之间的联系. 图数据库:以图的结构存储管理数据的数据库.其中一些数据库将原生的图结构经过优化后直接存储,即原生图存储.还 ...

  8. Java操作Neo4J就是这么简单,#yyds盘点#

    使用 Java 操作 Neo4J 首先我们先使用原生的这种方式,导入 jar 包,然后: public class TestController { public static void main(S ...

  9. 【知识图谱】Py2neo操作Neo4j使用教程

    Py2neo操作Neo4j使用教程 1. Py2neo 安装 2. 连接 Neo4j 3. 数据对象 Object 3.1 Node 3.2 Relationship 3.3 Subgraphs 4. ...

最新文章

  1. protobuf + maven 爬坑记
  2. php生成vcf,[宜配屋]听图阁 - PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】 原创...
  3. linux网络配置命令 ifconfig 、route 、ip 、ip route
  4. 方法重载 java 1614780176
  5. 数据库MySQL(课下作业,必做)
  6. “天才少年”刚毕业就拿到华为200万年薪:确认过眼神,是我羡慕不来的人
  7. c# linux 效率,c# – linux / mono上的HTTP性能
  8. Linux调试登陆Visual Studio
  9. 【转载】spring mvc 使用session
  10. 图片旋转,拖拽,缩放,删除一体
  11. Bash基础——快捷键
  12. BZOJ2592: [Usaco2012 Feb]Symmetry
  13. 外架小横杆外露长度规范要求_外架小横杆外露长度
  14. Shellsploit注入器简单利用
  15. Arduino ESP8266 AP Web 服务器示例程序
  16. EXICOM/STAHL触摸屏维修MT-577-SX-TFT-T-AC-AL故障概述
  17. 概率论与数理统计大作业实验报告
  18. 软件开发:项目设计思路(流程、功能方法和数据结构)
  19. Oracle BLOB类型的数据如何查看和下载?
  20. ActiveSync与设备连接

热门文章

  1. 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
  2. Java 蓝桥杯 时间转换
  3. 服务器虚拟化的主备,云服务器可以主备切换
  4. linux nohup后台执行管道操作
  5. tshark 操作后保存为pcap数据包
  6. Hurst exponent(赫斯特指数)代码与R/S值计算——python
  7. seaborn单变量/双变量/多变量绘图
  8. java 调用打印机 api_java 调用打印机API无法打印,但是直接打印可以,请问有人遇到过这样的问题吗?...
  9. winform 获取焦点_AutoCAD .NET 二次开发实例(13) 获取块参照坐标并输出到Excel
  10. cfd软件对电脑配置要求_这种网格划分策略,让洁净和空调CFD实施周期压缩至0.3倍...