使用 NoSQL 键值数据存储构建应用程序

入门指南

模块 2:插入和检索数据

创建书店应用程序的数据表,插入数据和检索数据

简介

在本模块中,我们需要调用 DynamoDB CreateTable API 接口为书店应用程序创建一个数据表。然后,使用 PartiQL 插入数据项,并测试检索数据项。我们先来了解一下 PartiQL,PartiQL 是一种兼容 SQL 的查询语言,可以用来查询以不同索引方式存储的数据,而不会受结构的层级限制。如需了解有关 PartiQL 的更多信息,请参阅 Amazon DynamoDB 开发人员指南中的“什么是 PartiQL?”文档。

 时长

15 分钟

 前提条件

  • 已有一个 AWS 账户。如果您还没有 AWS 账户,请先创建和配置账户。更多信息,请参阅设置环境
  • 运行 pip install boto3 命令安装的 AWS SDK

操作步骤

步骤 1:创建表

使用以下表结构创建一个表,用于存储产品目录中的书籍数据。更多信息,请参阅 创建一个表

  • Title(字符串):书名字段
  • Author(字符串):书籍的作者字段
  • Category(字符串):书籍类别字段,例如历史、传记和科幻
  • Formats(映射):指定销售的不同书籍格式,如精装、平装和有声读物,及其在库存系统中的项目编号

您还需要为这个表创建由 Author Title 组成的复合主键。

下面的 Python 代码用于调用 CreateTable API 接口创建名为 Books 的表 在此代码中,需注意下列几点:
  • 在这个脚本中,CreateTable API 接口的调用请求中使用 KeySchema 参数指定表的复合主键。 

  • 在 DynamoDB 中,您可以分别设置读容量和写容量。这样,您可以根据应用程序的业务需求精细调整配置,避免因过度配置而产生的高昂费用。
import boto3

# boto3 is the AWS SDK library for Python.
# We can use the low-level client to make API calls to DynamoDB.
client = boto3.client('dynamodb', region_name='us-east-1')

try: 
resp = client.create_table( 
TableName=\"Books\", 
# Declare your Primary Key in the KeySchema argument 
KeySchema=[ 
{ 
"AttributeName": "Author", 
"KeyType": "HASH" 
}, 
{ 
"AttributeName": "Title", 
"KeyType": "RANGE" 
} 
],
# Any attributes used in KeySchema or Indexes must be declared in AttributeDefinitions 
AttributeDefinitions=[ 
{ 
"AttributeName": "Author", 
"AttributeType": "S" 
}, 
{ 
"AttributeName": "Title", 
"AttributeType": "S" 
} 
],
# ProvisionedThroughput controls the amount of data you can read or write to DynamoDB per second. 
# You can control read and write capacity independently. 
ProvisionedThroughput={ 
"ReadCapacityUnits": 1, 
"WriteCapacityUnits": 1 
} 
) 
print("Table created successfully!")except Exception as e: 
print("Error creating table:") 
print(e)

步骤 2:向 Books 表中插入数据项

创建一个名为 partiqlbatch.json 的文件。文件中包含以下内容:

[
    {
        "Statement": "INSERT INTO "Books" value {'Author': 'Antje Barth', 'Title': 'Data Science on AWS','Category': 'Technology', 'Formats': { 'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX' } }"
    },
    {
        "Statement": "INSERT INTO "Books" value {'Author': 'Julien Simon', 'Title': 'Learn Amazon SageMaker','Category': 'Technology', 'Formats': { 'Hardcover': 'Q7QWE3U2','Paperback': 'ZVZAYY4F', 'Audiobook': 'DJ9KS9NM' } }"
    },
    {
        "Statement": "INSERT INTO "Books" value {'Author': 'James Patterson', 'Title': 'Along Came a Spider','Category': 'Suspense', 'Formats': { 'Hardcover': 'C9NR6RJ7','Paperback': '37JVGDZG', 'Audiobook': '6348WX3U' } }"
    },
    {
        "Statement": "INSERT INTO "Books" value {'Author': 'Dr. Seuss', 'Title': 'Green Eggs and Ham','Category': 'Children', 'Formats': { 'Hardcover': 'GVJZQ7JK','Paperback': 'A4TFUR98', 'Audiobook': 'XWMGHW96' } }"
    },
    {
        "Statement": "INSERT INTO "Books" value {'Author': 'William Shakespeare', 'Title': 'Hamlet', 'Category': 'Drama', 'Formats': { 'Hardcover': 'GVJZQ7JK','Paperback': 'A4TFUR98', 'Audiobook': 'XWMGHW96' } }"
    }
]

在您的命令行工具中,运行以下命令导入书籍数据:

aws dynamodb batch-execute-statement -–statements file://partiqlbatch.json

现在,您已将五本书籍的数据载入表中。每本书籍的数据都包括 Author Title 属性,即表的主键字段,以及 Category Formats 属性。每个属性都有一个类型,它可以是简单类型,例如字符串类型的 Category 属性;也可以是复杂类型,例如 map 类型的 Formats 属性。

步骤 3:从 Books 表中检索数据项

以下代码用于检索单个数据项,即 Antje Barth 所著的 Data Science on AWS 一书。

import boto3
 
dynamodb = boto3.client('dynamodb', region_name='us-east-1') 
resp = dynamodb.execute_statement(Statement='SELECT * FROM Books WHERE Author = \'Antje Barth\' AND Title = \'Data Science on AWS\'')
print(resp['Items'])

返回结果应如下所示:

{'Author': 'Antje Barth', 'Title': 'Data Science on AWS','Category': 'Technology', 'Formats': { 'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX' }}

总结

在本模块中,我们学习了如何调用 DynamoDB CreateTable API 接口为书店应用程序创建一个数据表,并使用 PartiQL 在这个数据表中插入和检索数据项。

下一项:查询和二级索引