问题描述
我正在使用 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
也作为输入传递,函数也会创建 (merge
s) 分支
(: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)