在 Neptune 等基于 Gremlin 的数据库中存储 date/timestamp 的正确方法是什么?
What is the correct way to store date/timestamp in Gremlin based database like Neptune?
在 Amazon Neptune 等基于 gremlin 的数据库中存储 date/time 邮票的正确方法是什么?
当我在 python
中尝试以下操作时
current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', current_timestamp).next()
它给我输出,类似于
'otp_verified_on': datetime.datetime(2021, 11, 23, 9, 47, 30, 173000)
所以我输入 cast to string
current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', str(current_timestamp)).next()
得到如下结果
'otp_verified_on': '2021-11-23 08:27:45.867543'
我的查询基于日期比较操作 gte
、lte` 等...
better/correct实现方式是什么?
Neptune 会将 Python 日期转换为适当的内部形式,您可以直接对日期进行评估。这是一组示例。您不需要(也不应该)强制转换为字符串。另一种方法是存储纪元偏移整数,但在 Neptune 的情况下,使用原生 Python 日期在计算执行方式方面会稍微更有效。您应该检查您可能使用的每个数据库的文档,但对于 Neptune,使用本机 Python datetime
是最好的方法。
>>> import datetime
>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[eebec326-001f-577b-0893-bbd0ddf5e271]
>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[3ebec326-0628-8b3a-5d4e-9d7292075072]
>>> g.V().hasLabel('test').valueMap(True).toList()
[{<T.id: 1>: 'eebec326-001f-577b-0893-bbd0ddf5e271', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 27, 448000)]},
{<T.id: 1>: '3ebec326-0628-8b3a-5d4e-9d7292075072', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 30, 589000)]}]
>>> g.V().hasLabel('test').has('ts',lt(datetime.datetime.now())).toList()
[v[eebec326-001f-577b-0893-bbd0ddf5e271], v[3ebec326-0628-8b3a-5d4e-9d7292075072]]
>>> g.V().hasLabel('test').has('ts',gt(datetime.datetime.now())).toList()
[]
在 Amazon Neptune 等基于 gremlin 的数据库中存储 date/time 邮票的正确方法是什么?
当我在 python
中尝试以下操作时current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', current_timestamp).next()
它给我输出,类似于
'otp_verified_on': datetime.datetime(2021, 11, 23, 9, 47, 30, 173000)
所以我输入 cast to string
current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', str(current_timestamp)).next()
得到如下结果
'otp_verified_on': '2021-11-23 08:27:45.867543'
我的查询基于日期比较操作 gte
、lte` 等...
better/correct实现方式是什么?
Neptune 会将 Python 日期转换为适当的内部形式,您可以直接对日期进行评估。这是一组示例。您不需要(也不应该)强制转换为字符串。另一种方法是存储纪元偏移整数,但在 Neptune 的情况下,使用原生 Python 日期在计算执行方式方面会稍微更有效。您应该检查您可能使用的每个数据库的文档,但对于 Neptune,使用本机 Python datetime
是最好的方法。
>>> import datetime
>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[eebec326-001f-577b-0893-bbd0ddf5e271]
>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[3ebec326-0628-8b3a-5d4e-9d7292075072]
>>> g.V().hasLabel('test').valueMap(True).toList()
[{<T.id: 1>: 'eebec326-001f-577b-0893-bbd0ddf5e271', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 27, 448000)]},
{<T.id: 1>: '3ebec326-0628-8b3a-5d4e-9d7292075072', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 30, 589000)]}]
>>> g.V().hasLabel('test').has('ts',lt(datetime.datetime.now())).toList()
[v[eebec326-001f-577b-0893-bbd0ddf5e271], v[3ebec326-0628-8b3a-5d4e-9d7292075072]]
>>> g.V().hasLabel('test').has('ts',gt(datetime.datetime.now())).toList()
[]