在python下boto3与dynamoDB 的基本交互和如何进行表的备份与恢复


本文摘自php中文网,作者巴扎黑,侵删。

参考资料:http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html

最近因工作需要,研究了一下boto3中dynamoDB部分,略有心得,在此总结一下。

首先是boto3的安装,在装有python和pip的机器上,运行

1

sudo pip install boto3

官网文档里,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 的基本交互和如何进行表的备份与恢复的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

iPythonPython区别

Python怎么下载库

Python如何爬取网页中js添加的内容 (代码)

Python占位符怎么输入

Python语言合法命名有哪些

Python数据分析有什么用

range在Python中是什么意思

Python注释用什么符号

Python中对数函数怎么表示

request库爬虫是什么?如何使用?(实例讲解)

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...