使用boto使用LSI在dynamoDB中创建表

时间:2015-11-03 16:56:36

标签: python amazon-dynamodb boto

我知道如何使用boto创建表,但我找不到任何有关创建包含LSI的表的在线帮助。我搜索了boto文档和AWS文档。如果您有一个如何创建这样一个表的简单示例,我可以从那里开始。

由于

1 个答案:

答案 0 :(得分:5)

在我的研究中遇到了你的问题以找到同样的事情。不确定你是否想出了这个,但我想我会把我的发现发给其他可能需要知道这一点的人。

在我的情况下,我需要能够查询并根据两个不同的排序键返回结果,' date'和' post_id'对于我需要创建一个名为'帖子'和我想要创建的本地二级索引(LSI),名为' PostsByDate'。

以下是我的解决方案。它是用Python编写的,但我相信你可以用你所选择的语言弄清楚如何处理它。

from __future__ import print_function # Python 2/3 compatibility
import boto3

dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000", region_name="us-west-2")


table = dynamodb.create_table(
    TableName='Posts',
    KeySchema=[
        {
            'AttributeName': 'user_id',
            'KeyType': 'HASH'  #Partition key
        },
        {
            'AttributeName': 'post_id',
            'KeyType': 'RANGE'  #Sort key
        },
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'user_id',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'post_id',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'date',
            'AttributeType': 'N'
        },

    ],
    LocalSecondaryIndexes=[
        {
            'IndexName': 'PostsByDate',
            'KeySchema': [
                {
                    'AttributeName': 'user_id',
                    'KeyType': 'HASH'  #Partition key
                },
                {
                    'AttributeName': 'date',
                    'KeyType': 'RANGE'  #Sort key
                },
            ],
            'Projection': {
                'ProjectionType': 'ALL'
            }
        }
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 10,
        'WriteCapacityUnits': 10,
        }
)

print("Table status:", table.table_status)