当前位置: 首页 > 知识库问答 >
问题:

DynamoDB时间戳属性以字符串格式存储,应检索指定时间戳范围内的记录

费辰阳
2023-03-14

Dynamodb具有时间戳属性,以字符串格式存储日期和时间“Thu Jan14 19:55:27UTC 2021”。现在,我想检索介于“Thu Jan11 20:55:27UTC 2021”和“Thu Jan13 22:15:27UTC 2021”之间的记录。下面是代码:

from datetime import datetime
from boto3.dynamodb.conditions import Attr

def lambda_handler(event, context):
    startdatetime=event["startdate"]
    enddatetime=event["enddate"]
    start=datetime.strptime(startdatetime,"%a %b %d %H:%M:%S UTC %Y")
    end=datetime.strptime(enddatetime,"%a %b %d %H:%M:%S UTC %Y")
    
    fe=Attr('timestamp').between(start,end)
    response = table.scan(
            FilterExpression=fe
    )

这并没有给出正确的记录集,因为字符串和日期时间之间正在进行比较。未将Attr()转换为datetime。下面是我尝试的代码片段:

fe=datetime.strptime(str(Attr('timestamp')),"%a %b %d %H:%M:%S UTC %Y").between(start, end)

这也于事无补。

对此有什么建议吗?

共有1个答案

严永丰
2023-03-14

DynamoDB对这两部分进行字符串比较,它没有实际的日期时间概念,这就是为什么您必须小心在表中存储日期时间信息的方式。

基本上有两种方法建议在查询之间为存储数据:

  • UTC时间的ISO8601,大致如下:<代码>2021-02-12T18:50:00.000 00:00
  • 历元时间,自1970-01-01T00:00:00.000 00:00起的秒数

查询时,还需要根据这些规则规范化要查询的时间戳,否则将无法正常工作。

归根结底,您想要查询它的方式不起作用,因为当底层数据结构是字符串时,该格式不适合在查询之间使用。

 类似资料:
  • 我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。

  • 现在,如果我只希望得到时间戳和sensorId,那么我阅读了投影表达式,并尝试执行一个查询(query.json): aws cli命令 给了我:

  • 问题内容: 我最近了解到oracle具有对我来说非常有用的功能-因为设计者/实现者不太在意数据历史记录- 我可以查询记录的历史状态(如果它在oracle缓存中仍然可用),如下所示: 但是现在我需要检查范围内的历史数据。使用缓存是否有可能? 问题答案: 是的,像这样: 请注意,您可以走多远受UNDO_RETENTION参数的限制,通常为几小时而不是几天。

  • 我正在尝试将流转换为破折号。问题是我收到了很多错误,如下所示(虽然它似乎将其分割为多个文件,但我在播放器上也收到了错误)。问题是我为什么会收到这些错误以及如何修复它?如果我简单地将其“复制”为单个mp4文件,它就不会出错。 输出 复制到单个MP4工作正常ffmpeg-i“a.mkv”-y-映射0:1-c:0复制-f MP4-破折号1“out/out.MP4”-日志级别错误 探针 沙卡调试

  • 问题内容: 有什么方法可以在MySQL中将字符串转换为UNIX时间戳? 例如,我有一个字符串,需要使用unix时间戳格式。 问题答案: 绝招: 但是,该函数仅采用标准的MySQL格式化日期。如果要使用AM / PM表示法,则需要先使用如下代码:

  • 问题内容: 我有一列称为“ s_timestamp”。 如何返回时间戳中具有当天的所有记录? 例如, 我想要以下输出: 让我知道是否不清楚。 问题答案: 只是使用。例如 日期() CURDATE()