博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Amazon DynamoDB 入门8:删除项目
阅读量:5999 次
发布时间:2019-06-20

本文共 4745 字,大约阅读时间需要 15 分钟。

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

从表中删除数据

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

SQL

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

DELETE FROM Music

WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';
我们可以修改 WHERE 子句以删除多个行。例如,删除某个特殊艺术家的所有歌曲,如下所示:

DELETE FROM Music WHERE Artist = 'The Acme Band'

Note

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

DynamoDB

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

( 语法如下]:

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

(语法如下]

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 是模仿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()

就是这么方便。

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

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

转载地址:http://xhzmx.baihongyu.com/

你可能感兴趣的文章
Velocity NYC 2016 参会总结
查看>>
在Windows下搭建Gitlab服务器
查看>>
linux 权限与用户
查看>>
Eclipse 远程调试
查看>>
android decorView详解
查看>>
美媒采访MariaDB首位中国成员彭立勋 报道阿里云与MariaDB的双向合作
查看>>
技术分享:如何在阿里云服务器上部署网站
查看>>
VR技术
查看>>
android 实现倒影
查看>>
CentOS下安装配置VNC
查看>>
JAVA CAS单点登录之四:CAS服务器增加JDBC访问能力
查看>>
转 用十条命令在一分钟内检查Linux服务器性能
查看>>
通过TortoiseSVN查看SVN代码修改记录
查看>>
oracle 11g客户端如何完全卸载
查看>>
CentOS6.6下安装Redmine2.6(整合Apache2.4)
查看>>
Perl语言——简单说明
查看>>
新闻发布系统,防火墙关了吗?
查看>>
R语言中矩阵运算
查看>>
JVM的重排序
查看>>
windows7下虚拟AP共享上网
查看>>