使用 boto3 在 DynamoDB 中创建'SS'项目



我正试图使用boto3在AWS DynamoDB中创建一个项目,无论我尝试什么,我都无法创建"SS"类型的项目。这是我的代码:

client = boto3.resource('dynamodb', region_name=region)
table = client.Table(config[region]['table'])
sched = {
"begintime": begintime,
"description": description,
"endtime": endtime,
"name": name,
"type": "period",
"weekdays": [weekdays]
}
table.put_item(Item=sched)

其他列工作正常,但无论我尝试什么,weekdays总是以"S"类型结束。作为参考,这是同一张表中的其他项目之一:

{'begintime': '09:00', 'endtime': '18:00', 'description': 'Office hours', 'weekdays': {'mon-fri'}, 'name': 'office-hours', 'type': 'period'}

尝试将其转换为Python结构显然失败了,所以我不确定如何插入新项。

要使用boto3 DynamoDB资源级方法指示SS(字符串集(类型的属性,需要提供一个集,而不是一个简单的列表。例如:

import boto3
res = boto3.resource('dynamodb', region_name=region)
table = res.Table(config[region]['table'])
sched = {
"begintime": '09:00',
"description": 'Hello there',
"endtime": '14:00',
"name": 'james',
"type": "period",
"weekdays": set(['mon', 'wed', 'fri'])
}
table.put_item(Item=sched)

作为@jarmod答案的后续:

如果您想用字符串集调用update_item,那么您将通过ExpressionAttributeValues属性插入一个集,如下所示:

entry = table.put_item(
ExpressionAttributeNames={
"#begintime": "begintime",
"#description": "description",
"#endtime": "endtime",
"#name": "name",
"#type": "type",
"#weekdays": "weekdays"
},
ExpressionAttributeValues={
":begintime": '09:00',
":description": 'Hello there',
":endtime": '14:00',
":name": 'james',
":type": "period",
":weekdays": set(['mon', 'wed', 'fri'])
},
UpdateExpression="""
SET #begintime= :begintime,
#description = :description,
#endtime = :endtime,
#name = :name,
#type = :type,
#weekdays = :weekdays
"""
)

(提示:不赞成使用AttributeUpdates(与Item相关的put_Item调用等效(,因此我建议使用ExpressionAttributeNamesExpressionAttributeValuesUpdateExpression(。

最新更新