专栏首页CSDN技术头条解读Neo4j全新的Python驱动程序

解读Neo4j全新的Python驱动程序

尽管Neo4j社区目前已发布了Java、Python、JavaScript和.NET官方支持的驱动程序,但其发展并未停步。本周,Neo4j发布驱动程序py2neo 3.1版本,同时还为Python用户推出了全新的OGM。

OGM(Object-Graph Mapper)和图形数据库的关系,就相当于ORM(对象关系映射)和传统RDMS之间的关系:前者都是一个架构,可供构建database-aware领域对象(domain objects)。

Py2neo OGM的操作围绕新的GraphObject类展开。此处其扮演基础类和管理者的双重角色:前者限定了领域对象;后者则支持基础节点和使py2neo OGM持久化的相关平台。

借Movie Graph(和Neo4j预先打包)为例,以该数据集为基础,模拟一个Person类:

class Person(GraphObject):
    __primarykey__ = "name"
    name = Property()
    born = Property()

此处,一个Person类有两类属性。而Neo4j的属性没有固定类型,因此,比起典型ORM下的SQL字段,其相关定义较少。

类属性和基础属性名称相同:命名和生成。必要时,其可重定向为不同名属性,含表达式例如Property(name="actual_name")。

最终,定义一个主键(primarykey),指出哪种属性是push和pull操作的唯一标识符;定义一个primarylabel,尽管是默认条件,仍可用Person代替。

综上所述,可以通过一个Cypher statement,挑选出一个特定Person对象节点:

MATCH (a:Person) WHERE a.name = {n} RETURN a

此外,如果想要在同一个数据集内,模拟Person和Movie,还有其关联平台,可通过以下途径:

class Movie(GraphObject):
    __primarykey__ = "title"
    title = Property()
    tagline = Property()
    released = Property()
    actors = RelatedFrom("Person", "ACTED_IN")
    directors = RelatedFrom("Person", "DIRECTED")
    producers = RelatedFrom("Person", "PRODUCED")
class Person(GraphObject):
    __primarykey__ = "name"
    name = Property()
    born = Property()
    acted_in = RelatedTo(Movie)
    directed = RelatedTo(Movie)
    produced = RelatedTo(Movie)

此处包含两类新属性:RelatedTo和RelatedFrom。这两类属性定义了关系对象集(连接方式相似)。换句话说,就是它们共享相同的开始节点或终止节点,和共同的关系类型。

以acted_in = RelatedTo(Movie)为例,它描述了一组Movie关系节点集,这些节点都是通过一个输出ACTED_IN关系来连接的。这里要注意的是,和上面提及的属性命名一样,关系类型也默认自动匹配属性名,只不过此处字母为大写形式。相反,对应的反向定义,actors = RelatedFrom("Person", "ACTED_IN")则明指定了关系名,以区分与属性名的差异。

为了研究执行对象的方法,可以假设一个情境:需要从数据库中提取出Keanu Reeves,并将他和经典影片Bill & Ted’s Excellent Adventure相连接 (不包含在原始图当中)。在这种情况下,首先要利用GraphObject类,并通过Person子类选择演员。随后,构建一个新的Movie对象,并添加到Keanu Reeves参与演出的影片集当中。最终,将上述全部信息汇入图表中。进程代码如下:

keanu = Person.select(graph, "Keanu Reeves").first()
bill_and_ted = Movie()
bill_and_ted.title = "Bill & Ted's Excellent Adventure"
keanu.acted_in.add(bill_and_ted)
graph.push(keanu)

通过一个类似集的端口(提供添加和移除方法),关系对象支持其父类对象。这些数据汇入图表之后,为了完成操作,OGM架构自动构建并运行所有必要的Cypher。

该方法也可用于执行其它更复杂的选择。Where

method可利用所有WHERE

子句中的expression。比如要输出所有名字首字母是“K”的演员,操作如下:

for person in Person.select(graph).where("_.name =~ 'K.*'"):
    print(person.name)

注意:此处用到下划线字符来指代待匹配节点。

Py2neo文档还包含很多其它信息,且GitHub知识库当中还有一个演示应用程序,该程序展示了一个微型movie浏览器(截图如下)当中,一切是如何运行的。

本文分享自微信公众号 - CSDN技术头条(CSDN_Tech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试必备:Java 面试最常见的 200+ 题

    说了这么多,直奔主题,这套面试必备的《Java 最常见 200+ 面试题全解析》到底优质在哪?

    CSDN技术头条
  • 宜信陈欢谈智能金融:区块链改变商业逻辑,它的服务也有边界

    2018年1月29日,宜信公司首席战略官陈欢受邀出席《麻省理工科技评论》新兴科技峰会EmTech China,并发表以《当我们在谈AI金融的时候,我们在说什么》...

    CSDN技术头条
  • AI速查表:神经网络、机器学习、深度学习与数据科学一览

    本文是Chatbots Life创始人Stefan Kojouharov花费数学心血搜集的AI概念速查表,是学习神经网络、机器学习、深度学习与大数据必备之良方。...

    CSDN技术头条
  • MATLAB快速入门----处理图形对象

    当调用绘图函数时,MATLAB® 使用各种图形对象(例如,图窗窗口、轴、线条、文本等)创建图形。每个对象都具有一组固定的属性,您可以使用这些属性控制图形的行为和...

    艾木樨
  • JVM学习笔记——Java内存区域与内存溢出异常

    其中,其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Method Stack 和Program Counter ...

    用户1665735
  • 物联网时代-跟着Thingsboard学IOT架构-HTTP设备协议及API相关限制

    thingsboard GitHub: https://github.com/thingsboard/thingsboard

    sanshengshui
  • Java初学者需掌握的30个概念

    基本概念:       1.OOP中唯一关心的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道c...

    猿人谷
  • Java编程思想学习录(连载之:一切都是对象)

    CodeSheep
  • java的finalize()方法与C++的析构函数

    Tencent JCoder
  • Worksheet工作表对象基础

    大家好,前面介绍了最常用的单元格Range对象,本节开始介绍Worksheet工作表对象的相关内容(基础内容已有涉及),后续会再分别介绍它的属性、方法以及事件等...

    无言之月

扫码关注云+社区

领取腾讯云代金券