解读Neo4j全新的Python驱动程序

原文:The World’s Most Amazing Python Driver for Neo4j

作者:Nigel Small

译者:仲培艺,关注数据库领域,纠错、寻求报道或者投稿请致邮:zhongpy@csdn.net。

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

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

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

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

classPerson(GraphObject):

__primarykey__ = "name"

name =Property()born =Property()

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

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

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

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

MATCH (a:Person) WHEREa.name = {n}RETURNa

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

classMovie(GraphObject):    __primarykey__ ="title"title =Property()    tagline =Property()    released =Property()    actors = RelatedFrom("Person","ACTED_IN")    directors = RelatedFrom("Person","DIRECTED")    producers = RelatedFrom("Person","PRODUCED")classPerson(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”的演员,操作如下:

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

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

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

2016年8月12日-13日,由CSDN重磅打造的互联网应用架构实战峰会、运维技术与实战峰会将在成都举行,目前18位讲师和议题已全部确认。两场峰会大牛讲师来自阿里、腾讯、百度、京东、小米、乐视、聚美优品、YY、华为、360等知名互联网公司,共同探讨高可用/高并发/高性能系统架构设计、电商架构、分布式架构、运维工具研发与实践、运维自动化系统的构建、大数据与运维、云上的运维案例分析、虚拟化技术、应用性能检测与管理、游戏行业的运维实践等,将和与会嘉宾共同探讨「构建更安全、更高性能、更稳定的架构和运维体系」等领域的话题与技术。【目前限时6折,点击这里抢票】

7月15日24点前仍处于最低六折优惠票价阶段,单场峰会(含餐)门票只需499元,5人以上团购或者购买两场峰会通票更有特惠,限时折扣,预购从速。(票务详情链接)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 写在前面 从去年找工作结束之后,就一直没有再写博文了,不知不觉已经过去大半年了T_T。鸟哥也从学校正式步入职场,开...
    niaoge2016阅读 2,186评论 0 6
  • 概要 之前在CSDN上写过一个blog(http://blog.csdn.net/wrzcy/article/de...
    Gun_Fox阅读 66,044评论 19 44
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 有人说青春是苦涩的,有人说青春是甜蜜的,也有人说青春是酸爽的。但不管怎么说,怎么想,青春都是我们老去后最值得回忆的...
    RainBowey丶阅读 286评论 1 7
  • 火红的枫叶坠落入湖,淡淡的水波荡漾开。红芒夺目。 他站在大街中央,人来人往。湿润的气流穿过广阔的太平洋,化为淅淅沥...
    弗雷月阅读 305评论 0 2