Amazon DynamoDB 入门8:删除项目

上一篇介绍了DynamoDB 的更新,这一篇将会介绍项目删除操作和dynamoab-py

从表中删除数据

在 SQL 中,DELETE 语句从表中删除一个或多个行。DynamoDB 使用 DeleteItem 操作一次删除一个项目。

SQL

在 SQL 中,可使用 DELETE 语句删除一个或多个行。WHERE 子句确定要修改的行。示例如下:

DELETE FROM Music

DELETE FROM Music WHERE Artist = ‘The Acme Band’

Note

如果省略 WHERE 子句,则数据库会尝试从表中删除所有行。

DynamoDB

在 DynamoDB 中,可使用 DeleteItem 操作修改单个项目。

(http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/APIReference/API_DeleteItem.html?shortFooter=true)[API 语法如下]:

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

参数说明:

  • Key: 主键,用于定位项目
  • TableName:表名 (最小 3. 最大 255)
  • ConditionExpression:条件表达式(仅在特定 ConditionExpression 的计算结果为 true 时成功完成)
  • ExpressionAttributeNames:条件表达式的名称的别名,比如 date 为保留字,可用别名定义为 #d
  • ExpressionAttributeValues:条件表达式的值
  • ReturnConsumedCapacity:显示使用的写入容量单位数
    • TOTAL 会返回由表及其所有global secondary index占用的写入容量;
    • INDEXES 仅返回由global secondary index占用的写入容量;
    • NONE 表示您不需要返回任何占用容量统计数据。
  • ReturnValues: 更新后返回的数据.
    • NONE - 如果没有特别说明,返回None (这个是默认值)
    • ALL_OLD - 按在进行更新之前的情况,返回整个项目。
  • ReturnItemCollectionMetrics: Determines whether item collection metrics are returned. If set to SIZE , the response includes statistics about item collections, if any, that were modified during the operation are returned in the response. If set to NONE (the default), no statistics are returned.

(http://boto3.readthedocs.io/en/stable/reference/services/dynamodb.html?highlight=dynamodb#DynamoDB.Table.delete_item)[boto3语法如下]

response = table.delete_item(
    Key={        'string': 'string'|123|Binary(b'bytes')|True|None|set(['string'])|set([123])|set([Binary(b'bytes')])|[]|{}
    },
    ConditionalOperator='AND'|'OR',
    ReturnValues='NONE'|'ALL_OLD'|'UPDATED_OLD'|'ALL_NEW'|'UPDATED_NEW',
    ReturnConsumedCapacity='INDEXES'|'TOTAL'|'NONE',
    ReturnItemCollectionMetrics='SIZE'|'NONE',
    ConditionExpression=Attr('myattribute').eq('myvalue'),
    ExpressionAttributeNames={        'string': 'string'
    },
    ExpressionAttributeValues={        'string': 'string'|123|Binary(b'bytes')|True|None|set(['string'])|set([123])|set([Binary(b'bytes')])|[]|{}
    }
)

在 DynamoDB 中,可使用 DeleteItem 操作从表中删除数据(一次删除一个项目)。必须指定项目的主键值。示例如下:

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

除了 DeleteItem 之外,Amazon DynamoDB 还支持同时删除多个项目的 BatchWriteItem 操作。

DeleteItem 支持条件写入,在此情况下,操作仅在特定 ConditionExpression 的计算结果为 true 时成功完成。例如,以下 DeleteItem 操作仅在项目具有 RecordLabel 属性时删除项目:

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

删除操作就这么简单,下边是福利时间。

是不是每次用boto3 操作DynamoDB 都有种痛不欲生的感觉,下边我们介绍一个新工具。

dynamodb-py

dynamodb-py  是模仿sqlalchemy 编写的DynamoDB ORM 它的使用方法特别简单,下边来看几个示例:

表的操作
from dynamodb.model import Modelfrom dynamodb.fields import CharField, IntegerField, FloatField, DictFieldfrom dynamodb.table import Tableclass Movies(Model):

    __table_name__ = 'Movies'

    ReadCapacityUnits = 10
    WriteCapacityUnits = 10

    year = IntegerField(name='year', hash_key=True)
    title = CharField(name='title', range_key=True)
    rating = FloatField(name='rating', indexed=True)
    rank = IntegerField(name='rank', indexed=True)
    release_date = CharField(name='release_date')
    info = DictField(name='info', default={})# create_tableTable(Movies()).create()# update_tableTable(Movies()).update()# delete_tableTable(Movies()).delete()
查询项目
# query without indexitems = Movies.query().where(Movies.year.eq(year)).all()
items = Movies.query().where(Movies.year.eq(1985)).limit(10).all()
items = (Movies.query()
        .where(Movies.year.eq(1992),
               Movies.title.between('A', 'L'))
        .all())# query with indexitems = (Movies.query()
        .where(Movies.year.eq(1992),
               Movies.title.between('A', 'L'))
        .order_by(Movies.rating, asc=False)
        .all())
更新项目
item = Movies.get(year=year, title=title)

item.update(rank=2467, rating=7.1)
删除项目
item = Movies.get(year=year, title=title)

item.delete()

就是这么方便。

不过dynamodb-py 还在开发中,欢迎试用,也欢迎贡献自己的力量。

终于,下一节介绍索引的查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值