我有下一个代码:
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
})
但是当我运行它时,它会失败并显示错误:
TypeError:不支持的类型"<输入' datetime.datetime' >" for value" 2015-01-12 05:02:57.053131"
我尝试了很多方法,但似乎无法将datetime
保存到DynamoDB。顺便说一句,它在MongoDB中运行良好。
有没有解决方案?
答案 0 :(得分:27)
好的,我看到DynamoDB不支持任何日期类型。所以唯一的解决方案是使用类似unix的时间作为整数,或者将日期保存为字符串。
答案 1 :(得分:9)
根据文件: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaSDKHighLevel.html
日期S(字符串类型)。 Date值存储为ISO-8601格式 字符串。
答案 2 :(得分:6)
根据alejandro-franco response .isoformat()
提出的伎俩。
刚刚测试过这个例子:
CustomerPreferenceTable.put_item(
Item={
"id": str(uuid4()),
"validAfter": datetime.utcnow().isoformat(),
"validBefore": (datetime.utcnow() + timedelta(days=365)).isoformat(),
"tags": ["potato", "eggplant"]
}
)
答案 3 :(得分:2)
我不确定为什么在DynamoDB中不支持datetime,或者实际上我也没有使用它。
但是,如果您坚持不按照建议的方式将日期时间转换为字符串,则可以将日期时间转换为时间戳,以便与之进行比较。
您可能想要阅读此SO Question,似乎数字比较是首选方式。
答案 4 :(得分:1)
这些是DynamoDB中列出的in their AWS Docs属性值的所有受支持类型。
B 二进制数据类型。
输入:Blob
必填:否
BOOL 布尔数据类型。
类型:布尔值
必填:否
BS 二进制集数据类型。
键入:Blob数组
必填:否
L 属性值列表。
类型:AttributeValue对象数组
必填:否
M 属性值的地图。
类型:String to AttributeValue对象图
必填:否
N 数字数据类型。
类型:字符串
必填:否
NS 数字集数据类型。
键入:字符串数组
必填:否
NULL Null数据类型。
类型:布尔值
必填:否
S 字符串数据类型。
类型:字符串
必填:否
SS 字符串集数据类型。
键入:字符串数组
必填:否
答案 5 :(得分:1)
最近阅读文档,我找到了文档Testing text() nodes vs string values in XPath的正确链接。在 DynamoDB 中存储日期和时间数据的推荐方法是使用 ISO 8601 字符串。所以数据类型只是字符串。
答案 6 :(得分:0)
如果您想使用日期查找用户,您只需调用date()
功能即可。像这样:
...
users_table = Table(users_table_name, connection=Core.aws_dynamodb_connection)
current = datetime.now()
users_table.put_item(data={
"login": login,
"password": hashlib.sha256(password.encode("utf-8")).hexdigest(),
"profile": profile,
# here use a different name for the entry
"registration_time": current
"registration_date": current.date()
})
...
答案 7 :(得分:0)
旧帖子,但也许仍然很有趣..
您可以做什么以及它如何为我服务:
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,
}
)
并适应上面的代码:
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,
})
我的输出