是否可以将日期时间保存到DynamoDB?

Ale*_*nev 34 python datetime boto amazon-web-services amazon-dynamodb

我有下一个代码:

users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
users_table.put_item(data={
  "login": login,
  "password": hashlib.sha256(password.encode("utf-8")).hexdigest(),
  "profile": profile,
  "registration_date": datetime.now() # PROBLEM IS HERE
})
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它失败并出现错误:

TypeError:不支持类型"<type'datetime.datetime'>"的值为"2015-01-12 05:02:57.053131"

我已经尝试了很多方法,但似乎无法保存datetime到DynamoDB.顺便说一句,它在MongoDB中运行良好.

有什么解决方案吗?

Ale*_*nev 31

好的,我看到DynamoDB不支持任何日期类型.所以唯一的解决方案是使用类似unix的时间作为整数,或将日期保存为字符串.

在此输入图像描述

  • 你应该接受自己的答案,以便其他人知道他们在相同情况下的原因和解决方案. (3认同)

Fre*_*pos 11

根据文档:http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaSDKHighLevel.html

日期S(字符串类型).Date值存储为ISO-8601格式的字符串.


小智 9

根据alejandro-franco的回应 .isoformat()做出了trick 俩。

刚刚测试过,这是一个有效的示例:

CustomerPreferenceTable.put_item(
    Item={
        "id": str(uuid4()),
        "validAfter": datetime.utcnow().isoformat(),
        "validBefore": (datetime.utcnow() + timedelta(days=365)).isoformat(),
        "tags": ["potato", "eggplant"]
    }
)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,datetime.utcnow() 不会返回带有时区信息的日期。因此,在解析时,您应该知道存储的信息是 UTC。而不是我会使用 datetime.utcnow().replace(tzinfo=timezone.utc).isoformat(),这样生成的信息就可以很容易地用 datetime.fromisoformat() 解析。 (2认同)

小智 8

老帖子但也许仍然有趣..

您可以做什么以及它对我有何作用:

import datetime
from datetime import datetime

...

now = datetime.now()
x = now.strftime("%m/%d/%Y, %H:%M:%S")

 table.put_item(
           Item={
               'Index': Index,
           
               'Stamp': x,
               
            }
        )

Run Code Online (Sandbox Code Playgroud)

并适应上面的代码:

import datetime
from datetime import datetime

...

now = datetime.now()
x = now.strftime("%m/%d/%Y, %H:%M:%S")

users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
users_table.put_item(data={
  "login": login,
  "password": hashlib.sha256(password.encode("utf-8")).hexdigest(),
  "profile": profile,
  "registration_date": x, 
})   
Run Code Online (Sandbox Code Playgroud)

我的输出

可以在DB中看到格式