以字符串格式存储的 DynamoDB 时间戳属性,应检索指定时间戳范围内的记录
Posted
技术标签:
【中文标题】以字符串格式存储的 DynamoDB 时间戳属性,应检索指定时间戳范围内的记录【英文标题】:DynamoDB timestamp attribute stored in string format, should retrieve records within a specified timestamp range 【发布时间】:2021-05-16 11:39:20 【问题描述】:Dynamodb 具有时间戳属性,它以字符串格式存储日期和时间“Thu Jan 14 19:55:27 UTC 2021”。 现在,我想检索“2021 年 1 月 11 日星期四 20:55:27 UTC 2021”和“2021 年 1 月 13 日 22:15:27 UTC”之间的记录。 下面是代码:
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() 转换为日期时间。 下面是我试过的代码sn-p:
fe=datetime.strptime(str(Attr('timestamp')),"%a %b %d %H:%M:%S UTC %Y").between(start, end)
这也没有帮助。
对此有何建议?
【问题讨论】:
相关:***.com/questions/40561484/… 【参考方案1】:DynamoDB 对没有日期时间的实际概念的部分进行字符串比较,这就是为什么您必须小心在表中存储日期时间信息的方式。
对于between
查询,推荐使用两种方式存储数据:
2021-02-12T18:50:00.000+00:00
Epoch 时间,距离1970-01-01T00:00:00.000+00:00
的秒数
查询的时候,还需要按照这些规则对要查询的时间戳进行归一化处理,否则不起作用。
底线,你想要查询它的方式不起作用,因为当底层数据结构是字符串时,格式不适合在查询之间。
【讨论】:
以上是关于以字符串格式存储的 DynamoDB 时间戳属性,应检索指定时间戳范围内的记录的主要内容,如果未能解决你的问题,请参考以下文章