模块 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 组成的复合主键。
- 在这个脚本中,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 在这个数据表中插入和检索数据项。
下一项:查询和二级索引