簡體   English   中英

使用 boto3 在 DynamoDB 中創建“SS”項目

[英]Creating a 'SS' item in DynamoDB using boto3

我正在嘗試使用 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 (與put_item調用等效的相關Item ),因此我建議使用ExpressionAttributeNamesExpressionAttributeValuesUpdateExpression )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM