表格存储提供了DeleteRow接口用于删除单行数据以及BatchWriteRow接口用于批量删除数据。

前提条件

  • 已初始化Client。具体操作,请参见初始化
  • 已创建数据表并写入数据。

删除单行数据

调用DeleteRow接口删除一行数据。如果删除的行不存在,则不会发生任何变化。

接口

"""
说明:删除一行数据。
``table_name``是数据表名称。
``row``表示行数据,在delete_row中仅包含主键。
``condition``表示执行操作前做条件检查,满足条件才执行,是tablestore.metadata.Condition类的实例。
支持对行的存在性和列条件进行检查,其中行存在性检查条件包括'IGNORE'、'EXPECT_EXIST'和'EXPECT_NOT_EXIST'。

返回:本次操作消耗的CapacityUnit和需要返回的行数据return_row。
consumed表示消耗的CapacityUnit,是tablestore.metadata.CapacityUnit类的实例。
return_row表示需要返回的行数据。
"""
def delete_row(self, table_name, row, condition, return_type = None):                    

参数

参数 说明
table_name 数据表名称。
primary_key 行的主键。
说明 设置的主键个数和类型必须和数据表的主键个数和类型一致。
condition 使用条件更新,可以设置原行的存在性条件或者原行中某列的列值条件。更多信息,请参见条件更新

示例

删除一行数据。

primary_key = [('gid',1), ('uid','101')]
row = Row(primary_key)
try:
    consumed, return_row = client.delete_row(table_name, row, None)
# 客户端异常,一般为参数错误或者网络异常。
except OTSClientError as e:
    print "update row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message())
# 服务端异常,一般为参数错误或者流控错误。
except OTSServiceError as e:
    print "update row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id())
print ('Delete succeed, consume %s write cu.' % consumed.write)                   

详细代码请参见DeleteRow@GitHub

批量删除数据

  1. 根据实际选择合适的方式查询待删除数据的主键信息。
    • 如果要删除指定主键范围内的数据,请调用GetRange接口,查询指定主键范围内的数据,并获取待删除数据的主键信息。具体操作,请参见范围读取数据
    • 如果要删除满足指定条件的数据,请创建多元索引后,使用多元索引查询满足指定条件的数据,并获取待删除数据的主键信息。具体操作,请参见创建多元索引使用SDK
  2. 调用BatchWriteRow接口,根据主键信息批量删除数据。更多信息,请参见批量写入数据