py2neo v2020.1 - ModuleNotFoundError:没有名为“py2neo.ext”的模块

问题描述

我正在使用 py2neo V3 关注 Nicole White Neo4j 博客教程,但我使用的是 V.2020.1.1。

我想使用函数 GregorianCalendar,但在我的代码运行时

from py2neo.ext.calendar import GregorianCalendar 
# the way to import GregorianCalendar in py2neo V3 

我明白

ModuleNotFoundError: 没有名为“py2neo.ext”的模块

所以我一直在py2neo V.2020.1.1 documentation中寻找GregorianCalendar,但是我找不到。
这个版本有这个功能吗?

如果没有,有没有类似的?是否有可能通过一些解决方法获得相同的结果?

解决方法

这个模块已经不存在了,并且已经有一段时间没有完成了。尽管 Neo4j 现在支持原生日期/时间类型,但在最近的版本中没有等效的时间树功能。

,

由于 py2neo.ext.calendar 模块在 py2neo V. 2020.1 中不再存在,
我自己实现了一个自定义 gregorian_calendar 函数。

gregorian_calendar(graph,time1=some_time,node1=some_node)

给定所需的日期和图形作为输入,创建一个链

很有用
(:Calendar { calendar_type: 'Gregorian' })-[:YEAR]->
(:Year { year: 'that year',key: 'that year' })-[:MONTH]->
(:Month { month: 'that month (in number)',key: 'that month-year' })-[:DAY]->
(:Day { day: 'that day (in number)',key: 'that day-month-year' })

如果时间不作为参数传递,函数使用 datetime.now() 产生的时间来确定今年、月份和日期。

如果 some_node 也作为输入传递,函数也会创建 (merges) 分支

(:Day { day: 'that day (in number)',key: 'that day-month-year' })-[:ON]->(:some_node)

from py2neo import Graph,Node,Relationship
from datetime import datetime


# equivalente del gregorian calendar
def gregorian_calendar(graph,time1=None,node1=None):

    if time1 is None:
        time1 = datetime.now()

    # gregorian calendar node
    gregorian_node = Node("Calendar",calendar_type="Gregorian")
    gregorian_node.__primarylabel__ = list(gregorian_node.labels)[0]
    gregorian_node.__primarykey__ = "calendar_type"
    graph.merge(gregorian_node)

    # year node
    that_year_node = Node("Year",year=time1.year,key=time1.strftime("%Y"))
    that_year_node.__primarylabel__ = list(that_year_node.labels)[0]
    that_year_node.__primarykey__ = "year"
    graph.merge(that_year_node)

    # calendar has year
    rel = Relationship(gregorian_node,"YEAR",that_year_node)
    graph.merge(rel)

    # month node
    that_month_node = Node("Month",month=time1.month,key=time1.strftime("%m-%Y"))
    that_month_node.__primarylabel__ = list(that_month_node.labels)[0]
    that_month_node.__primarykey__ = "month"
    graph.merge(that_month_node)

    # year has month
    rel = Relationship(that_year_node,"MONTH",that_month_node)
    graph.merge(rel)

    # day node
    that_day_node = Node("Day",day=time1.day,key=time1.strftime("%d-%m-%Y"))
    that_day_node.__primarylabel__ = list(that_day_node.labels)[0]
    that_day_node.__primarykey__ = "day"
    graph.merge(that_day_node)

    # month has day
    rel = Relationship(that_month_node,"DAY",that_day_node)
    graph.merge(rel)

    # post was published on (gregorian) day
    if node1 is not None:
        rel = Relationship(node1,"ON",that_day_node)
        graph.create(rel)