输出表格内容有限制和过滤

时间:2015-09-02 05:08:01

标签: python amazon-web-services amazon-dynamodb boto

我找到了boto dynamoDB文档lacking almost completely of examples

在Python中,我只想输出一个表的内容,其中包含一些记录的限制,比如特定日期的500个记录。

这是我的......

import boto.dynamodb
import sys

#----------PUBLIC VARIABLES--------------------------#

connection = boto.dynamodb.connect_to_region(
    'us-east-1',
    aws_access_key_id='somekey',
    aws_secret_access_key='somesecretkey')

#----------------------------------------------------#

def info():
    print('#########################_TABLE_NAMES_#########################')
    #get and print list of tables
    tablenames = connection.list_tables()
    for table in tablenames:
        print('DynamoDB table: %s' % table)
        #print(connection.describe_table(table))
    print('###############################################################' + '\n')

def main():
    print('###########################_RESULTS_###########################')   
    scan = myTable.scan(scan_filter=None, attributes_to_get=['SomeField'])
    results = []
    for x in scan:
        results.append(x['SomeField'])
    print('###############################################################' + '\n')  
def writeError(error):
    try:
        f = open("error.txt", "w")
        try:
            f.write(error) # Write a string to a file
        finally:
            f.close()
    except IOError:
        print "WriteError - Error!"

if __name__ == '__main__':
    try:
        info()
        main()
    except:
        writeError("Unexpected error:" + str(sys.exc_info()))
        print "Error"

我所拥有的表格没有任何自定义索引,所以我一直在寻找一些非常基本的东西作为例子。

对不起,我没有更好的尝试,但我已经进行了研究,但没有发现很多事情。

1 个答案:

答案 0 :(得分:1)

我修改了您的脚本,打印出每个表的前500个扫描结果。不要忘记更正字段名称(我把someField):

import boto.dynamodb2
from boto.dynamodb2.table import Table
import sys

#----------PUBLIC VARIABLES--------------------------#

connection = boto.dynamodb2.connect_to_region(
    'us-east-1')

#----------------------------------------------------#

def getTableNames():
    '''get list of tables'''
    tablenames = connection.list_tables()["TableNames"]
    return tablenames

def main(tablenames=[]):
    print('###########################_RESULTS_###########################')  
    for table in tablenames:
        print "Table Name: " + table
        myTable = Table(table)
        scan = myTable.scan()
        results = []
        for item in scan:
            if len(results) >= 500:
                break
            results.append(item.get('someField'))
        for result in results:
            print result
    print('###############################################################' + '\n')  
def writeError(error):
    try:
        f = open("error.txt", "w")
        try:
            f.write(error) # Write a string to a file
        finally:
            f.close()
    except IOError:
        print "WriteError - Error!"

if __name__ == '__main__':
    try:
        tablenames = getTableNames()
        main(tablenames)
    except:
        writeError("Unexpected error:" + str(sys.exc_info()))
        print "Error"

请注意,DynamoDB不会以任何顺序提供扫描结果。如果您希望按最新更改排序,则可以使用基于DynamoDB Streams https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html的解决方案或添加辅助索引:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html