国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Amazon DynamoDB 入門7:項目更新

Backache / 3231人閱讀

摘要:在更新表達式中使用操作可從集中刪除元素。替換整個項目,而不是替換單個屬性。的行為與操作的行為類似如果項目位于表中,則更新項目,否則添加插入新項目。支持條件寫入,在此情況下,操作僅在特定的計算結果為時成功完成。

上一節介紹了DynamoDB 的查詢,本來計劃這一節介紹使用索引的查詢,不過隨機看到了更新操作,就先寫更新操作吧

update (修改表中的數據)

SQL 語言提供用于修改數據的 UPDATE 語句。DynamoDB 使用 UpdateItem 操作完成類似的任務。

SQL

在 SQL 中,可使用 UPDATE 語句修改一個或多個行。SET 子句為一個或多個列指定新值,WHERE 子句確定修改的行。示例如下:

UPDATE Music
SET RecordLabel = "Global Records"
WHERE Artist = "No One You Know" AND SongTitle = "Call Me Today";

如果任何行均不匹配 WHERE 子句,則 UPDATE 語句不起作用。

DynamoDB

在 DynamoDB 中,可使用 UpdateItem 操作修改單個項目。

API 語法如下:

{
   "AttributeUpdates": {
      "string" : {
         "Action": "string",
         "Value": {
            "B": blob,
            "BOOL": boolean,
            "BS": [ blob ],
            "L": [
               "AttributeValue"
            ],
            "M": {
               "string" : "AttributeValue"
            },
            "N": "string",
            "NS": [ "string" ],
            "NULL": boolean,
            "S": "string",
            "SS": [ "string" ]
         }
      }
   },
   "ConditionalOperator": "string",
   "ConditionExpression": "string",
   "Expected": {
      "string" : {
         "AttributeValueList": [
            {
               "B": blob,
               "BOOL": boolean,
               "BS": [ blob ],
               "L": [
                  "AttributeValue"
               ],
               "M": {
                  "string" : "AttributeValue"
               },
               "N": "string",
               "NS": [ "string" ],
               "NULL": boolean,
               "S": "string",
               "SS": [ "string" ]
            }
         ],
         "ComparisonOperator": "string",
         "Exists": boolean,
         "Value": {
            "B": blob,
            "BOOL": boolean,
            "BS": [ blob ],
            "L": [
               "AttributeValue"
            ],
            "M": {
               "string" : "AttributeValue"
            },
            "N": "string",
            "NS": [ "string" ],
            "NULL": boolean,
            "S": "string",
            "SS": [ "string" ]
         }
      }
   },
   "ExpressionAttributeNames": {
      "string" : "string"
   },
   "ExpressionAttributeValues": {
      "string" : {
         "B": blob,
         "BOOL": boolean,
         "BS": [ blob ],
         "L": [
            "AttributeValue"
         ],
         "M": {
            "string" : "AttributeValue"
         },
         "N": "string",
         "NS": [ "string" ],
         "NULL": boolean,
         "S": "string",
         "SS": [ "string" ]
      }
   },
   "Key": {
      "string" : {
         "B": blob,
         "BOOL": boolean,
         "BS": [ blob ],
         "L": [
            "AttributeValue"
         ],
         "M": {
            "string" : "AttributeValue"
         },
         "N": "string",
         "NS": [ "string" ],
         "NULL": boolean,
         "S": "string",
         "SS": [ "string" ]
      }
   },
   "ReturnConsumedCapacity": "string",
   "ReturnItemCollectionMetrics": "string",
   "ReturnValues": "string",
   "TableName": "string",
   "UpdateExpression": "string"
}

參數說明:

Key: 主鍵,用于定位項目

TableName:表名 (最小 3. 最大 255)

Expected:

AttributeUpdates: 遺留參數,已廢棄

ConditionalOperator: 遺留參數,已廢棄

ConditionExpression:條件表達式(僅在特定 ConditionExpression 的計算結果為 true 時成功完成)

ExpressionAttributeNames:條件表達式的名稱的別名,比如 date 為保留字,可用別名定義為 #d

ExpressionAttributeValues:條件表達式的值

ReturnConsumedCapacity:顯示使用的寫入容量單位數

TOTAL 會返回由表及其所有global secondary index占用的寫入容量;

INDEXES 僅返回由global secondary index占用的寫入容量;

NONE 表示您不需要返回任何占用容量統計數據。

ReturnValues: 更新后返回的數據.

NONE - 如果沒有特別說明,返回None (這個是默認值)

ALL_OLD - 按在進行更新之前的情況,返回整個項目。

ALL_NEW - 按在進行更新之后的情況,返回整個項目。

UPDATED_OLD - 按在進行更新之前的情況,僅返回更新的值。

UPDATED_NEW - 按在進行更新之后的情況,僅返回更新的值。

UpdateExpression:指定要修改的屬性以及這些屬性的新值,更新表達式還指定如何修改屬性。下面是更新表達式的語法摘要:

update-expression ::=
SET set-action , ...
| REMOVE remove-action , ...  
| ADD add-action , ...
| DELETE delete-action , ...  

更新表達式由多個部分組成。每個部分以一個 SET、REMOVE、ADD 或 DELETE 關鍵字開頭。您可在更新表達式中按任意順序包含其中任意部分。但是,每個部分關鍵字只能出現一次。您可以同時修改多個屬性。以下是更新表達式的一些示例:

SET list[0] = :val1

REMOVE #m.nestedField1, #m.nestedField2

ADD aNumber :val2, anotherNumber :val3

DELETE aSet :val4

以下示例顯示了帶有多個部分的單個更新表達式:

SET list[0] = :val1 REMOVE #m.nestedField1, #m.nestedField2 ADD aNumber :val2, anotherNumber :val3 DELETE aSet :val4

我們可以在更新表達式中使用任意屬性名稱,第一個字符是 a-z 或 A-Z,第二個字符(如果存在)是 a-z、A-Z 或 0-9。
如果屬性名稱不滿足此要求,則需要將表達式屬性名稱定義為占位符。更多信息參考(表達式屬性名稱)。

要在更新表達式中指定文本值,可以使用表達式屬性值。更多信息參考(表達式屬性值)。


SET

在更新表達式中使用 SET 操作可將一個或多個屬性與值添加到項目。如果這些屬性已存在,則更新。還可以使用 SET 來加或減數字類型的屬性。對多個屬性執行 SET 操作,使用逗號分隔。

set語法如下:

set-action ::=
    path = value

value ::=
    operand
    | operand "+" operand
    | operand "-" operand

operand ::=
    path | function

path 元素是項目的文檔路徑。(比如項目中info 為字典 info 中 a 的路徑為info["a"])

operand 元素可以為項目的文檔路徑,或者為函數。

SET 操作支持以下函數:

if_not_exists (path, operand) - 如果項目在指定 path 中不包含屬性,則 if_not_exists 的求值結果為 operand;否則求值結果為 path。您可以使用此函數來避免覆蓋項目中已存在的屬性。

list_append (operand, operand) - 此函數的求值結果為列表,新元素將添加到列表中。新元素必須包含在列表中,例如要向列表中添加 2,操作數將成為 [2]。您可以通過反轉操作數的順序,將新元素附加到列表的開頭或結尾。

以下是在這些函數中使用 SET 操作的一些示例。

如果屬性已存在,則以下示例不執行任何操作;否則它會將屬性設置為默認值。

SET Price = if_not_exists(Price, 100)

以下示例將新元素添加到 FiveStar 評論列表。表達式屬性名稱 #pr 是 ProductReviews;屬性值 :r 是只包含一個元素的列表。如果列表之前有兩個元素 [0] 和 [1],則新元素將為 [2]。

SET #pr.FiveStar = list_append(#pr.FiveStar, :r)

以下示例將另一個元素添加到 FiveStar 評論列表中,但此時元素將附加到列表開頭的位置 [0] 處。列表中的所有其他元素將會移動一位。

SET #pr.FiveStar = list_append(:r, #pr.FiveStar)
REMOVE

在更新表達式中使用 REMOVE 操作可從項目中刪除一個或多個元素。要執行多個 REMOVE 操作,請使用逗號分隔。

下面是更新表達式中的 REMOVE 的語法摘要。唯一的操作數是您要刪除的屬性的文檔路徑:

remove-action ::=
    path

以下是使用 REMOVE 操作的更新表達式示例。從項目中刪除多個屬性:

REMOVE Title, RelatedItems[2], Pictures.RearView

對列表元素使用 REMOVE

當刪除現有列表元素時,剩余的元素將會移位。例如,考慮以下列表:

MyNumbers: { ["Zero","One","Two","Three","Four"] }

列表包含元素 [0]、[1]、[2]、[3] 和 [4]?,F在,我們使用 REMOVE 操作刪除兩個元素:

REMOVE MyNumbers[1], MyNumbers[3]

剩余的元素會向右移位,生成帶有元素 [0]、[1] 和 [2] 的列表,每個元素具有以下數據:

MyNumbers: { ["Zero","Two","Four"] }

如果您使用 REMOVE 來刪除超出列表中最后一個元素位置的不存在項目,則將不執行任何操作:也就是不刪除任何數據。例如,以下表達式對 MyNumbers 列表沒有任何效果:

REMOVE MyNumbers[11]
ADD

ADD 操作僅支持數字和集數據類型。一般而言,我們建議使用 SET 而不是 ADD。

在更新表達式中使用 ADD 可執行以下任一操作:

如果屬性尚不存在,則將新屬性及其值添加到項目。

如果屬性已存在,則 ADD 的行為取決于屬性的數據類型:

如果屬性是數字,并且添加的值也是數字,則該值將按數學運算與現有屬性相加。(如果該值為負數,則從現有屬性減去該值。)

如果屬性是集,并且您添加的值也是集,則該值將附加到現有集中。

要執行多個 ADD 操作,請使用逗號分隔。

在以下語法摘要中:

path 元素是屬性的文檔路徑。屬性必須為數字或集數據類型。

value 元素是要與屬性相加的值(對于數字數據類型),或者是要附加到屬性中的集(對于集類型)。

add-action ::=
    path value

以下是使用 add 操作的一些更新表達式示例。

以下示例對數字進行加運算。表達式屬性值 :n 是數字,此值將與 Price 相加。

ADD Price :n

以下示例將一個或多個值添加到 Color 集。表達式屬性值 :c 是字符串集。

ADD Color :c
DELETE

DELETE 操作只支持集數據類型。

在更新表達式中使用 DELETE 操作可從集中刪除元素。要執行多個 DELETE 操作,請使用逗號分隔。

在以下語法摘要中:

path 元素是屬性的文檔路徑。該屬性必須是集數據類型。

value 元素是集中要刪除的元素。

delete-action ::=
    path value

以下示例使用 DELETE 操作從 Color 集中刪除元素。表達式屬性值 :c 是字符串集。

DELETE Color :c
UpdateItem 示例如下:
{
    TableName: "Music",
    Key: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression: "SET RecordLabel = :label",
    ExpressionAttributeValues: {
        ":label": "Global Records"
    }
}

UpdateItem必須指定要修改的項目的 Key 屬性和一個用于指定屬性值的 UpdateExpression。

UpdateItem 替換整個項目,而不是替換單個屬性。

UpdateItem 的行為與“upsert”操作的行為類似:如果項目位于表中,則更新項目,否則添加(插入)新項目。

UpdateItem只能修改單個項目,如果要修改多個項目,則必須使用多個 UpdateItem 操作。

UpdateItem 支持條件寫入,在此情況下,操作僅在特定 ConditionExpression 的計算結果為 true 時成功完成。例如,除非歌曲的價格大于或等于 2.00,否則以下 UpdateItem 操作不會執行更新:

條件寫入

要執行條件更新,請使用更新表達式以及條件表達式來執行 UpdateItem 操作。要繼續執行操作,條件表達式的求值結果必須為 true;否則操作將失敗。

假設您要將某項目的價格提高一定金額,如 :amt,但前提是結果不得超過最高價。為此,您可以計算當前允許提價的最高價,然后從最高價中減去提高的金額 :amt。將結果定義為 :limit,然后使用以下條件表達式:

條件表達式:Price <= :limit)
更新表達式:SET Price = Price + :amt
現在假設您要為項目設置前視圖圖片,不過前提是該項目還沒有任何圖片,不希望覆蓋任何現有元素。您可以使用以下表達式來執行操作:

更新表達式:SET Pictures.FrontView = :myUR
(假設 :myURL 是項目圖片的位置,例如 http://example.com/picture.jpg。)
條件表達式:attribute_not_exists(Pictures.FrontView)

{
    TableName: "Music",
    Key: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression: "SET RecordLabel = :label",
    ConditionExpression: "Price >= :p",
    ExpressionAttributeValues: {
        ":label": "Global Records",
        ":p": 2.00
    }
}

UpdateItem 還支持原子計數器或類型為 Number 的屬性(可遞增或遞減)。原子計數器在很多方面都類似于 SQL 數據庫中的順序生成器、身份列或自遞增字段。

以下是一個 UpdateItem 操作的示例,它初始化一個新屬性 (Plays) 來跟蹤歌曲的已播放次數:

{
    TableName: "Music",
    Key: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression: "SET Plays = :val",
    ExpressionAttributeValues: {
        ":val": 0
    },
    ReturnValues: "UPDATED_NEW"
}

ReturnValues 參數設置為 UPDATED_NEW,這將返回已更新的任何屬性的新值。在此示例中,它返回 0(零)。

當某人播放此歌曲時,可使用以下 UpdateItem 操作來將 Plays 增加 1:

{
    TableName: "Music",
    Key: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression: "SET Plays = Plays + :incr",
    ExpressionAttributeValues: {
        ":incr": 1
    },
    ReturnValues: "UPDATED_NEW"
}
總結一下

UpdateItem 一次只能更新一個項目

UpdateItem 更新更新整個項目而不是只修改特點的值

UpdateItem 支持條件寫入

這一節我們介紹了DynamoDB 項目的更新操作,下一節我們將介紹項目的刪除操作(索引的查詢又要延后了。。

原文鏈接

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38520.html

相關文章

  • Amazon DynamoDB 入門8:刪除項目

    摘要:使用操作一次刪除一個項目。在中,可使用語句刪除一個或多個行。子句確定要修改的行。必須指定項目的主鍵值。示例如下除了之外,還支持同時刪除多個項目的操作。支持條件寫入,在此情況下,操作僅在特定的計算結果為時成功完成。 上一篇介紹了DynamoDB 的更新,這一篇將會介紹項目刪除操作和dynamoab-py 從表中刪除數據 在 SQL 中,DELETE 語句從表中刪除一個或多個行。Dynam...

    qiangdada 評論0 收藏0
  • Amazon DynamoDB 入門8:刪除項目

    摘要:使用操作一次刪除一個項目。在中,可使用語句刪除一個或多個行。子句確定要修改的行。必須指定項目的主鍵值。示例如下除了之外,還支持同時刪除多個項目的操作。支持條件寫入,在此情況下,操作僅在特定的計算結果為時成功完成。 上一篇介紹了DynamoDB 的更新,這一篇將會介紹項目刪除操作和dynamoab-py 從表中刪除數據 在 SQL 中,DELETE 語句從表中刪除一個或多個行。Dynam...

    douzifly 評論0 收藏0

發表評論

0條評論

Backache

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<