亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Amazon DynamoDB 入門(mén)7:項(xiàng)目更新

MSchumi / 1887人閱讀

摘要:在更新表達(dá)式中使用操作可從集中刪除元素。替換整個(gè)項(xiàng)目,而不是替換單個(gè)屬性。的行為與操作的行為類(lèi)似如果項(xiàng)目位于表中,則更新項(xiàng)目,否則添加插入新項(xiàng)目。支持條件寫(xiě)入,在此情況下,操作僅在特定的計(jì)算結(jié)果為時(shí)成功完成。

上一節(jié)介紹了DynamoDB 的查詢(xún),本來(lái)計(jì)劃這一節(jié)介紹使用索引的查詢(xún),不過(guò)隨機(jī)看到了更新操作,就先寫(xiě)更新操作吧

update (修改表中的數(shù)據(jù))

SQL 語(yǔ)言提供用于修改數(shù)據(jù)的 UPDATE 語(yǔ)句。DynamoDB 使用 UpdateItem 操作完成類(lèi)似的任務(wù)。

SQL

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

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

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

DynamoDB

在 DynamoDB 中,可使用 UpdateItem 操作修改單個(gè)項(xiàng)目。

API 語(yǔ)法如下:

{
   "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"
}

參數(shù)說(shuō)明:

Key: 主鍵,用于定位項(xiàng)目

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

Expected:

AttributeUpdates: 遺留參數(shù),已廢棄

ConditionalOperator: 遺留參數(shù),已廢棄

ConditionExpression:條件表達(dá)式(僅在特定 ConditionExpression 的計(jì)算結(jié)果為 true 時(shí)成功完成)

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

ExpressionAttributeValues:條件表達(dá)式的值

ReturnConsumedCapacity:顯示使用的寫(xiě)入容量單位數(shù)

TOTAL 會(huì)返回由表及其所有g(shù)lobal secondary index占用的寫(xiě)入容量;

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

NONE 表示您不需要返回任何占用容量統(tǒng)計(jì)數(shù)據(jù)。

ReturnValues: 更新后返回的數(shù)據(jù).

NONE - 如果沒(méi)有特別說(shuō)明,返回None (這個(gè)是默認(rèn)值)

ALL_OLD - 按在進(jìn)行更新之前的情況,返回整個(gè)項(xiàng)目。

ALL_NEW - 按在進(jìn)行更新之后的情況,返回整個(gè)項(xiàng)目。

UPDATED_OLD - 按在進(jìn)行更新之前的情況,僅返回更新的值。

UPDATED_NEW - 按在進(jìn)行更新之后的情況,僅返回更新的值。

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

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

更新表達(dá)式由多個(gè)部分組成。每個(gè)部分以一個(gè) SET、REMOVE、ADD 或 DELETE 關(guān)鍵字開(kāi)頭。您可在更新表達(dá)式中按任意順序包含其中任意部分。但是,每個(gè)部分關(guān)鍵字只能出現(xiàn)一次。您可以同時(shí)修改多個(gè)屬性。以下是更新表達(dá)式的一些示例:

SET list[0] = :val1

REMOVE #m.nestedField1, #m.nestedField2

ADD aNumber :val2, anotherNumber :val3

DELETE aSet :val4

以下示例顯示了帶有多個(gè)部分的單個(gè)更新表達(dá)式:

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

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

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


SET

在更新表達(dá)式中使用 SET 操作可將一個(gè)或多個(gè)屬性與值添加到項(xiàng)目。如果這些屬性已存在,則更新。還可以使用 SET 來(lái)加或減數(shù)字類(lèi)型的屬性。對(duì)多個(gè)屬性執(zhí)行 SET 操作,使用逗號(hào)分隔。

set語(yǔ)法如下:

set-action ::=
    path = value

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

operand ::=
    path | function

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

operand 元素可以為項(xiàng)目的文檔路徑,或者為函數(shù)。

SET 操作支持以下函數(shù):

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

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

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

如果屬性已存在,則以下示例不執(zhí)行任何操作;否則它會(huì)將屬性設(shè)置為默認(rèn)值。

SET Price = if_not_exists(Price, 100)

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

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

以下示例將另一個(gè)元素添加到 FiveStar 評(píng)論列表中,但此時(shí)元素將附加到列表開(kāi)頭的位置 [0] 處。列表中的所有其他元素將會(huì)移動(dòng)一位。

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

在更新表達(dá)式中使用 REMOVE 操作可從項(xiàng)目中刪除一個(gè)或多個(gè)元素。要執(zhí)行多個(gè) REMOVE 操作,請(qǐng)使用逗號(hào)分隔。

下面是更新表達(dá)式中的 REMOVE 的語(yǔ)法摘要。唯一的操作數(shù)是您要?jiǎng)h除的屬性的文檔路徑:

remove-action ::=
    path

以下是使用 REMOVE 操作的更新表達(dá)式示例。從項(xiàng)目中刪除多個(gè)屬性:

REMOVE Title, RelatedItems[2], Pictures.RearView

對(duì)列表元素使用 REMOVE

當(dāng)刪除現(xiàn)有列表元素時(shí),剩余的元素將會(huì)移位。例如,考慮以下列表:

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

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

REMOVE MyNumbers[1], MyNumbers[3]

剩余的元素會(huì)向右移位,生成帶有元素 [0]、[1] 和 [2] 的列表,每個(gè)元素具有以下數(shù)據(jù):

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

如果您使用 REMOVE 來(lái)刪除超出列表中最后一個(gè)元素位置的不存在項(xiàng)目,則將不執(zhí)行任何操作:也就是不刪除任何數(shù)據(jù)。例如,以下表達(dá)式對(duì) MyNumbers 列表沒(méi)有任何效果:

REMOVE MyNumbers[11]
ADD

ADD 操作僅支持?jǐn)?shù)字和集數(shù)據(jù)類(lèi)型。一般而言,我們建議使用 SET 而不是 ADD。

在更新表達(dá)式中使用 ADD 可執(zhí)行以下任一操作:

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

如果屬性已存在,則 ADD 的行為取決于屬性的數(shù)據(jù)類(lèi)型:

如果屬性是數(shù)字,并且添加的值也是數(shù)字,則該值將按數(shù)學(xué)運(yùn)算與現(xiàn)有屬性相加。(如果該值為負(fù)數(shù),則從現(xiàn)有屬性減去該值。)

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

要執(zhí)行多個(gè) ADD 操作,請(qǐng)使用逗號(hào)分隔。

在以下語(yǔ)法摘要中:

path 元素是屬性的文檔路徑。屬性必須為數(shù)字或集數(shù)據(jù)類(lèi)型。

value 元素是要與屬性相加的值(對(duì)于數(shù)字?jǐn)?shù)據(jù)類(lèi)型),或者是要附加到屬性中的集(對(duì)于集類(lèi)型)。

add-action ::=
    path value

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

以下示例對(duì)數(shù)字進(jìn)行加運(yùn)算。表達(dá)式屬性值 :n 是數(shù)字,此值將與 Price 相加。

ADD Price :n

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

ADD Color :c
DELETE

DELETE 操作只支持集數(shù)據(jù)類(lèi)型。

在更新表達(dá)式中使用 DELETE 操作可從集中刪除元素。要執(zhí)行多個(gè) DELETE 操作,請(qǐng)使用逗號(hào)分隔。

在以下語(yǔ)法摘要中:

path 元素是屬性的文檔路徑。該屬性必須是集數(shù)據(jù)類(lèi)型。

value 元素是集中要?jiǎng)h除的元素。

delete-action ::=
    path value

以下示例使用 DELETE 操作從 Color 集中刪除元素。表達(dá)式屬性值 :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必須指定要修改的項(xiàng)目的 Key 屬性和一個(gè)用于指定屬性值的 UpdateExpression。

UpdateItem 替換整個(gè)項(xiàng)目,而不是替換單個(gè)屬性。

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

UpdateItem只能修改單個(gè)項(xiàng)目,如果要修改多個(gè)項(xiàng)目,則必須使用多個(gè) UpdateItem 操作。

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

條件寫(xiě)入

要執(zhí)行條件更新,請(qǐng)使用更新表達(dá)式以及條件表達(dá)式來(lái)執(zhí)行 UpdateItem 操作。要繼續(xù)執(zhí)行操作,條件表達(dá)式的求值結(jié)果必須為 true;否則操作將失敗。

假設(shè)您要將某項(xiàng)目的價(jià)格提高一定金額,如 :amt,但前提是結(jié)果不得超過(guò)最高價(jià)。為此,您可以計(jì)算當(dāng)前允許提價(jià)的最高價(jià),然后從最高價(jià)中減去提高的金額 :amt。將結(jié)果定義為 :limit,然后使用以下條件表達(dá)式:

條件表達(dá)式:Price <= :limit)
更新表達(dá)式:SET Price = Price + :amt
現(xiàn)在假設(shè)您要為項(xiàng)目設(shè)置前視圖圖片,不過(guò)前提是該項(xiàng)目還沒(méi)有任何圖片,不希望覆蓋任何現(xiàn)有元素。您可以使用以下表達(dá)式來(lái)執(zhí)行操作:

更新表達(dá)式:SET Pictures.FrontView = :myUR
(假設(shè) :myURL 是項(xiàng)目圖片的位置,例如 http://example.com/picture.jpg。)
條件表達(dá)式: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 還支持原子計(jì)數(shù)器或類(lèi)型為 Number 的屬性(可遞增或遞減)。原子計(jì)數(shù)器在很多方面都類(lèi)似于 SQL 數(shù)據(jù)庫(kù)中的順序生成器、身份列或自遞增字段。

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

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

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

當(dāng)某人播放此歌曲時(shí),可使用以下 UpdateItem 操作來(lái)將 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"
}
總結(jié)一下

UpdateItem 一次只能更新一個(gè)項(xiàng)目

UpdateItem 更新更新整個(gè)項(xiàng)目而不是只修改特點(diǎn)的值

UpdateItem 支持條件寫(xiě)入

這一節(jié)我們介紹了DynamoDB 項(xiàng)目的更新操作,下一節(jié)我們將介紹項(xiàng)目的刪除操作(索引的查詢(xún)又要延后了。。

原文鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17574.html

相關(guān)文章

  • Amazon DynamoDB 入門(mén)8:刪除項(xiàng)目

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

    qiangdada 評(píng)論0 收藏0
  • Amazon DynamoDB 入門(mén)8:刪除項(xiàng)目

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

    douzifly 評(píng)論0 收藏0
  • Amazon DynamoDB 入門(mén)7項(xiàng)目更新

    摘要:在更新表達(dá)式中使用操作可從集中刪除元素。替換整個(gè)項(xiàng)目,而不是替換單個(gè)屬性。的行為與操作的行為類(lèi)似如果項(xiàng)目位于表中,則更新項(xiàng)目,否則添加插入新項(xiàng)目。支持條件寫(xiě)入,在此情況下,操作僅在特定的計(jì)算結(jié)果為時(shí)成功完成。 上一節(jié)介紹了DynamoDB 的查詢(xún),本來(lái)計(jì)劃這一節(jié)介紹使用索引的查詢(xún),不過(guò)隨機(jī)看到了更新操作,就先寫(xiě)更新操作吧 update (修改表中的數(shù)據(jù)) SQL 語(yǔ)言提供用于修改數(shù)據(jù)的...

    Backache 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MSchumi

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<