本文摘自php中文网,作者巴扎黑,侵删。
参考资料:http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html最近因工作需要,研究了一下boto3中dynamoDB部分,略有心得,在此总结一下。
首先是boto3的安装,在装有python和pip的机器上,运行
官网文档里,boto3提供的与dynamoDB交互的接口有以下几种:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | batch_get_item()
batch_write_item()
can_paginate()
create_table()
delete_item()
delete_table()
describe_limits()
describe_table()
describe_time_to_live()
generate_presigned_url()
get_item()
get_paginator()
get_waiter()
list_tables()
list_tags_of_resource()
put_item()
query()
scan()
tag_resource()
untag_resource()
update_item()
update_table()
update_time_to_live()
|
说白了,就是对表和记录的增、删、查、改。本文主要描述我最近使用的那几个接口。
要在python中使用boto3,就得先import boto3。当然,这是废话。为了使用方便,我先写了一个json格式的配置文件,如下:
1 | { "region_name" : "xxx" , "aws_access_key_id" : "xxx" , "aws_secret_access_key" : "xxx" }
|
然后封装了一个专门用于操作dynamoDB的类,目前什么都没有
1 | class dynamodb_operation():
|
它需要一个读取json文件的方法:
1 2 3 4 | def load_json(self,path): try :
with open(path) as json_file:
data = json.load(json_file)except Exception as e: print 'ERROR: no such file like ' + path
exit (-1) else : return data
|
由于读进来的文件可能不是json格式,我这里就是想让他报个错,然后退出。如果不想让它退出,在except里改改就好了。
然后,我希望这个类有一个私有成员client,在我实例化对象的时候就建立好连接,于是,有了以下初始化方法:
1 2 3 | def __init__(self,path):
conf = self.load_json(path)
self.client = boto3.client( 'dynamodb' ,region_name=conf[ 'region_name' ],aws_access_key_id=conf[ 'aws_access_key_id' ], aws_secret_access_key=conf[ 'aws_secret_access_key' ])
|
与之前的配置文件是对应的。
有了这个基础,就可以封装自己想要使用的方法了。各方法的在官网上的说明就不照搬过来了。
1、列出dynamoDB中的所有的表
1 2 3 4 5 6 7 8 | def list_all_table(self):
page=1LastEvaluationTableName = "" while True: if page == 1:
response = self.client.list_tables() else :
response = self.client.list_tables(
ExclusiveStartTableName=LastEvaluationTableName
)
TableNames = response[ 'TableNames' ] for table in TableNames: print tableif response.has_key( 'LastEvaluatedTableName' ):
LastEvaluationTableName = response[ "LastEvaluatedTableName" ] else :breakpage += 1
|
list_table()方法一次最多只能获取100张表的表名,并且在每次返回的时候,key为"LastEvaluatedTableName"的值为最后一张表的表名,可以做为下次请求的时候的参数。这样循环调用,即可获取所有的表名。如果后面没有表了,response里将不会有LastEvaluatedTableName。此处我只是想把表名打印到终端,如果想保存起来,也是可以的。
2、获取某张表的信息 describe_table()
1 2 3 | def get_table_desc_only(self,table): try :
response = self.client.describe_table(TableName=table)except Exception as e: print 'ERROR: no such table like ' + table
exit (-1) else : return response[ "Table" ]
|
此处只是将response["Table"]原原本本地返回,没有做其它处理。
如果我想知道一张表的大小,可以:
1 2 3 4 5 | def get_table_size(self,table):
response = self.get_table_desc_only(table)
stastic = {}
stastic[ 'TableSizeBytes' ] = response[ 'TableSizeBytes' ]
stastic[ 'ItemCount' ] = response[ 'ItemCount' ] return stastic
|
如果想知道其它信息,而且是只想知道那些信息的话,也可以写出对应的方法。
3、创建一张表
1 2 3 4 5 6 7 8 9 | def create_table(self,tablename,keySchema,attributeDefinitions,provisionedThroughput):
table = self.client.create_table(
TableName=tablename,
KeySchema=keySchema,
AttributeDefinitions=attributeDefinitions,
ProvisionedThroughput=provisionedThroughput
)# Wait until the table exists.self.client.get_waiter( 'table_exists' ).wait(TableName=tablename)
response = self.client.describe_table(TableName=tablename) print response
|
这是在创建一张没有索引的表。创表需要时间,所以使用了get_waiter()方法。
4、插入数据
1 2 3 4 5 6 | def put_item(self,tableName,item): try :
self.client.put_item(
TableName=tableName,
Item=item
)except Exception as e: print 'ERROR: put item fail. msg: ' + str(e)
exit (-1) else : return
|
封装的此方法需要传入的是一个格式正确的json,并且key要与表对应。比如:
1 | { 'uid' :{ 'N' : '999' }, 'aid' :{ 'N' : '999' }, 'sid' :{ 'N' : '999' }, 'ksid' :{ 'N' : '999' }}
|
5、删表
1 2 3 4 | def delete_table(self,table): try :
self.client.delete_table(
TableName=table
) except Exception as e: print 'ERROR: delete table ' + table + ' fail. msg: ' + str(e) else : print 'delete table ' + table + ' succ'
|
未完待续.....
以上就是在python下boto3与dynamoDB 的基本交互和如何进行表的备份与恢复的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
iPython和Python区别
Python怎么下载库
Python如何爬取网页中js添加的内容 (代码)
Python占位符怎么输入
Python语言合法命名有哪些
Python数据分析有什么用
range在Python中是什么意思
Python注释用什么符号
Python中对数函数怎么表示
request库爬虫是什么?如何使用?(实例讲解)
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 在python下boto3与dynamoDB 的基本交互和如何进行表的备份与恢复