成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Amazon DynamoDB 入門(mén)4:項(xiàng)目的基本操作(CRUD)

zhigoo / 2142人閱讀

摘要:使用項(xiàng)目的主鍵讀取項(xiàng)目提供操作來(lái)按項(xiàng)目的主鍵檢索項(xiàng)目。默認(rèn)情況下,將返回整個(gè)項(xiàng)目及其所有屬性。您必須指定項(xiàng)目的主鍵值。示例如下除了之外,還支持同時(shí)刪除多個(gè)項(xiàng)目的操作。支持條件寫(xiě)入,在此情況下,操作僅在特定的計(jì)算結(jié)果為時(shí)成功完成。

上一節(jié)我們介紹了DynamoDB 表的操作,這一節(jié)將介紹項(xiàng)目的添加 修改 獲取 刪除操作。

創(chuàng)建項(xiàng)目

Amazon DynamoDB 提供了 PutItem 和 BatchWriteItem 兩種方式寫(xiě)入數(shù)據(jù)

添加單個(gè)項(xiàng)目

在 Amazon DynamoDB 中,使用 PutItem 操作向表添加項(xiàng)目:

{
    TableName: "Music",
    Item: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today",
        "AlbumTitle":"Somewhat Famous",
        "Year": 2015,
        "Price": 2.14,
        "Genre": "Country",
        "Tags": {
            "Composers": [
                  "Smith",
                  "Jones",
                  "Davis"
            ],
            "LengthInSeconds": 214
        }
    }
}

此表的主鍵包含 Artist 和 SongTitle。您必須為這些屬性指定值。
以下是要了解的有關(guān)此 PutItem 示例的幾個(gè)關(guān)鍵事項(xiàng):

DynamoDB 使用 JSON 提供對(duì)文檔的本機(jī)支持。這使得 DynamoDB 非常適合存儲(chǔ)半結(jié)構(gòu)化數(shù)據(jù),例如 Tags。您也可以從 JSON 文檔中檢索和操作數(shù)據(jù)。?

除了主鍵(Artist 和 SongTitle),Music 表沒(méi)有預(yù)定義的屬性。?

大多數(shù) SQL 數(shù)據(jù)庫(kù)是面向事務(wù)的。當(dāng)您發(fā)出 INSERT 語(yǔ)句時(shí),數(shù)據(jù)修改不是永久性的,直至您發(fā)出 COMMIT 語(yǔ)句。利用 Amazon DynamoDB,當(dāng) DynamoDB 通過(guò) HTTP 200 狀態(tài)代碼 (OK) 進(jìn)行回復(fù)時(shí),PutItem 操作的效果是永久性的。?

Python Example

boto3

# ...
table = db3.Table("Music")
table.put_item(
      Item = {
        "Artist": "No One You Know",
        "SongTitle": "My Dog Spot",
        "AlbumTitle": "Hey Now",
        "Price": Decimal("1.98"),
        "Genre": "Country",
        "CriticRating": Decimal("8.4")
    }
)

Out[98]:
{"ResponseMetadata": {"HTTPHeaders": {"content-length": "2",
   "content-type": "application/x-amz-json-1.0",
   "server": "Jetty(8.1.12.v20130726)",
   "x-amz-crc32": "2745614147",
   "x-amzn-requestid": "c7c6be12-9752-403f-97b1-a9ac451a0a98"},
  "HTTPStatusCode": 200,
  "RequestId": "c7c6be12-9752-403f-97b1-a9ac451a0a98",
  "RetryAttempts": 0}}
  
table.put_item(
      Item = {
        "Artist": "No One You Know",
        "SongTitle": "Somewhere Down The Road",
        "AlbumTitle":"Somewhat Famous",
        "Genre": "Country",
        "CriticRating": Decimal("8.4"),
        "Year": 1984
    }
)
table.put_item(
      Item = {
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love",
        "AlbumTitle":"The Buck Starts Here",
        "Price": Decimal("2.47"),
        "Genre": "Rock",
        "PromotionInfo": {
            "RadioStationsPlaying":[
                 "KHCR", "KBQX", "WTNR", "WJJH"
            ],
            "TourDates": {
                "Seattle": "20150625",
                "Cleveland": "20150630"
            },
            "Rotation": "Heavy"
        }
    }
)

table.put_item(
      Item = {
        "Artist": "The Acme Band",
        "SongTitle": "Look Out, World",
        "AlbumTitle":"The Buck Starts Here",
        "Price": Decimal("0.99"),
        "Genre": "Rock"
    }
)

Note

PutItem 是覆蓋操作,如果主鍵相同,第二次執(zhí)行將覆蓋掉之前的數(shù)據(jù)

除了 PutItem 之外,Amazon DynamoDB 還支持同時(shí)寫(xiě)入多個(gè)(最多25個(gè))項(xiàng)目的 BatchWriteItem 操作。

添加多個(gè)項(xiàng)目 Python Example

boto3

# ...
table = db3.Table("Music")

with table.batch_writer() as batch:
    batch.put_item(
        Item = {
            "Artist": "The Acme Band",
            "SongTitle": "Look Out, World",
            "AlbumTitle":"The Buck Starts Here",
            "Price": Decimal("0.99"),
            "Genre": "Rock"
        }
    )
    batch.put_item(
        Item = {
            "Artist": "The Acme Band 0",
            "SongTitle": "Look Out, World",
            "AlbumTitle":"The Buck Starts Here",
            "Price": Decimal("1.99"),
            "Genre": "Rock"
        }
    )
    batch.put_item(
        Item = {
            "Artist": "The Acme Band 1",
            "SongTitle": "Look Out, World",
            "AlbumTitle":"The Buck Starts Here",
            "Price": Decimal("2.99"),
            "Genre": "Rock"
        }
    )
    batch.put_item(
        Item = {
            "Artist": "The Acme Band 1",
            "SongTitle": "Look Out, World",
            "AlbumTitle":"The Buck Starts Here",
        }
    )

BatchWriteItem 使用 overwrite_by_pkeys=["partition_key","sort_key"] 參數(shù)去除項(xiàng)目中重復(fù)的部分。

with table.batch_writer(overwrite_by_pkeys=["partition_key", "sort_key"]) as batch:
    batch.put_item(
        Item={
            "partition_key": "p1",
            "sort_key": "s1",
            "other": "111",
        }
    )
    batch.put_item(
        Item={
            "partition_key": "p1",
            "sort_key": "s1",
            "other": "222",
        }
    )

去重后,等同于:

with table.batch_writer(overwrite_by_pkeys=["partition_key", "sort_key"]) as batch:
    batch.put_item(
        Item={
            "partition_key": "p1",
            "sort_key": "s1",
            "other": "222",
        }
    )
讀取數(shù)據(jù)

利用 SQL,我們可以使用 SELECT 語(yǔ)句從表中檢索一個(gè)或多個(gè)行。可使用 WHERE 子句來(lái)確定返回給您的數(shù)據(jù)

DynamoDB 提供以下操作來(lái)讀取數(shù)據(jù):

GetItem - 從表中檢索單個(gè)項(xiàng)目。這是讀取單個(gè)項(xiàng)目的最高效方式,因?yàn)樗鼘⑻峁?duì)項(xiàng)目的物理位置的直接訪問(wèn)。(DynamoDB 還提供 BatchGetItem 操作,在單個(gè)操作中執(zhí)行最多 100 個(gè) GetItem 調(diào)用。)

Query - 檢索具有特定分區(qū)鍵的所有項(xiàng)目。在這些項(xiàng)目中,您可以將條件應(yīng)用于排序鍵并僅檢索一部分?jǐn)?shù)據(jù)。Query提供對(duì)存儲(chǔ)數(shù)據(jù)的分區(qū)的快速高效的訪問(wèn)。

Scan - 檢索指定表中的所有項(xiàng)目。

Note

利用關(guān)系數(shù)據(jù)庫(kù),您可以使用 SELECT 語(yǔ)句聯(lián)接多個(gè)表中的數(shù)據(jù)并返回結(jié)果。聯(lián)接是關(guān)系模型的基礎(chǔ)。要確保聯(lián)接高效執(zhí)行,應(yīng)持續(xù)優(yōu)化數(shù)據(jù)庫(kù)及其應(yīng)用程序的性能。
DynamoDB 是一個(gè)非關(guān)系 NoSQL 數(shù)據(jù)庫(kù)且不支持表聯(lián)接。相反,應(yīng)用程序一次從一個(gè)表中讀取數(shù)據(jù)。

使用項(xiàng)目的主鍵讀取項(xiàng)目

DynamoDB 提供 GetItem 操作來(lái)按項(xiàng)目的主鍵檢索項(xiàng)目。

默認(rèn)情況下,GetItem 將返回整個(gè)項(xiàng)目及其所有屬性。

{
    TableName: "Music",
    Key: {
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    }
}

可以添加 ProjectionExpression 參數(shù)以僅返回一些屬性:

{
    TableName: "Music",
    Key: {
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    },
    "ProjectionExpression": "AlbumTitle, Price"
}

DynamoDB GetItem 操作非常高效:此操作使用主鍵值確定相關(guān)項(xiàng)目的準(zhǔn)確存儲(chǔ)位置,并直接此位置檢索該項(xiàng)目。

SQL SELECT 語(yǔ)句支持多種查詢和表掃描。DynamoDB 通過(guò)其 Query 和 Scan 操作提供相似功能,如查詢表和掃描表中所述。

SQL SELECT 語(yǔ)句可執(zhí)行表聯(lián)接,這允許您同時(shí)從多個(gè)表中檢索數(shù)據(jù)。DynamoDB 是一個(gè)非關(guān)系數(shù)據(jù)庫(kù)。因此,它不支持表聯(lián)接。

Query 和 Scan 操作將在之后的章節(jié)詳細(xì)介紹。

Python Example

boto3

# ...
table = db3.Table("Music")
response = table.get_item(
    Key={
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love"
    }
)
item = response["Item"]
print(item)

# output
{
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love",
        "AlbumTitle":"The Buck Starts Here",
        "Price": Decimal("2.47"),
        "Genre": "Rock",
        "PromotionInfo": {
            "RadioStationsPlaying":[
                 "KHCR", "KBQX", "WTNR", "WJJH"
            ],
            "TourDates": {
                "Seattle": "20150625",
                "Cleveland": "20150630"
            },
            "Rotation": "Heavy"
        }
    }
    
response = table.get_item(
    Key={
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love"
    },
    ProjectionExpression = "AlbumTitle, Price"
)
item = response["Item"]
print(item)
{
    "AlbumTitle": u"The Buck Starts Here",
    "Price": Decimal("2.47")
} 
更新

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

在 DynamoDB 中,可使用 UpdateItem 操作修改單個(gè)項(xiàng)目。(如果要修改多個(gè)項(xiàng)目,則必須使用多個(gè) UpdateItem 操作。)
示例如下:

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

必須指定要修改的項(xiàng)目的 Key 屬性和一個(gè)用于指定屬性值的 UpdateExpression。

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

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

UpdateItem 支持條件寫(xiě)入,在此情況下,操作僅在特定 ConditionExpression 的計(jì)算結(jié)果為 true 時(shí)成功完成

{
    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 的屬性(可遞增或遞減)。

以下是一個(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"
}
Python Example

boto3
使用 UpdateItem 操作修改單個(gè)項(xiàng)目

import boto3
import json
import decimal

class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if o % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(DecimalEncoder, self).default(o)

db3 = boto3.resource("dynamodb", region_name="us-west-2", endpoint_url="http://localhost:8000")

table = db3.Table("Music")

response = table.update_item(
    Key={
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression="SET RecordLabel = :label",
    ExpressionAttributeValues={
        ":label": "Global Records"
    },
    ReturnValues="UPDATED_NEW"
)

print(json.dumps(response, indent=4, cls=DecimalEncoder))

UpdateItem 條件寫(xiě)入 價(jià)格大于或等于 2.00 UpdateItem 執(zhí)行更新

table = db3.Table("Music")

response = table.update_item(
    Key={
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression="SET RecordLabel = :label",
    ConditionExpression="Price >= :p",
    ExpressionAttributeValues={
        ":label": "Global Records",
        ":p": 2.00
    },
    ReturnValues="UPDATED_NEW"
)

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

table = db3.Table("Music")

response = table.update_item(
    Key={
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression="SET Plays = :val",
    ExpressionAttributeValues={ 
        ":val": 0
    },
    ReturnValues="UPDATED_NEW"
)

使用 UpdateItem 操作來(lái)將 Plays 增加 1

table = db3.Table("Music")

response = table.update_item(
    Key={
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today"
    },
    UpdateExpression="SET Plays = Plays + :incr",
    ExpressionAttributeValues={ 
        ":incr": 1
    },
    ReturnValues="UPDATED_NEW"
)
刪除項(xiàng)目

在 SQL 中,DELETE 語(yǔ)句從表中刪除一個(gè)或多個(gè)行。DynamoDB 使用 DeleteItem 操作一次刪除一個(gè)項(xiàng)目。

在 DynamoDB 中,可使用 DeleteItem 操作從表中刪除數(shù)據(jù)(一次刪除一個(gè)項(xiàng)目)。您必須指定項(xiàng)目的主鍵值。示例如下:

{
    TableName: "Music",
    Key: {
        Artist: "The Acme Band", 
        SongTitle: "Look Out, World"
    }
}

Note

除了 DeleteItem 之外,Amazon DynamoDB 還支持同時(shí)刪除多個(gè)項(xiàng)目的 BatchWriteItem 操作。

DeleteItem 支持條件寫(xiě)入,在此情況下,操作僅在特定 ConditionExpression 的計(jì)算結(jié)果為 true 時(shí)成功完成。例如,以下 DeleteItem 操作僅在項(xiàng)目具有 RecordLabel 屬性時(shí)刪除項(xiàng)目:

{
    TableName: "Music",
    Key: {
        Artist: "The Acme Band", 
        SongTitle: "Look Out, World"
    },
   ConditionExpression: "attribute_exists(RecordLabel)"
}
Python Example

boto3

table = db3.Table("Music")
table.delete_item(
    Key={
        "AlbumTitle": "Hey Now"
        "Artist": "No One You Know"
    }
)

這一節(jié)我們介紹了項(xiàng)目的基本操作(CRUD),下一節(jié)將介紹索引的創(chuàng)建和管理。

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

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

相關(guān)文章

  • Amazon DynamoDB 入門(mén)4項(xiàng)目基本操作CRUD

    摘要:使用項(xiàng)目的主鍵讀取項(xiàng)目提供操作來(lái)按項(xiàng)目的主鍵檢索項(xiàng)目。默認(rèn)情況下,將返回整個(gè)項(xiàng)目及其所有屬性。您必須指定項(xiàng)目的主鍵值。示例如下除了之外,還支持同時(shí)刪除多個(gè)項(xiàng)目的操作。支持條件寫(xiě)入,在此情況下,操作僅在特定的計(jì)算結(jié)果為時(shí)成功完成。 上一節(jié)我們介紹了DynamoDB 表的操作,這一節(jié)將介紹項(xiàng)目的添加 修改 獲取 刪除操作。 創(chuàng)建項(xiàng)目 Amazon DynamoDB 提供了 PutItem ...

    biaoxiaoduan 評(píng)論0 收藏0
  • Amazon DynamoDB 入門(mén)3: 表基本操作

    摘要:基本的操作包括表操作項(xiàng)目操作和索引管理。將立即執(zhí)行請(qǐng)求。返回一個(gè)包含操作結(jié)果的響應(yīng)。表是關(guān)系數(shù)據(jù)庫(kù)和中的基本數(shù)據(jù)結(jié)構(gòu)。每秒需對(duì)此表執(zhí)行的讀取和寫(xiě)入次數(shù)。 Amazon DynamoDB 表的基本操作 之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。 基本的DynamoDB 操作包括表操作、項(xiàng)目操作和索引管理。 首先是鏈...

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

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

0條評(píng)論

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