当前位置: 首页 > 知识库问答 >
问题:

使用boto3创建Dynamodb表时出错("botocore.exceptions.ClientError")

东郭凯捷
2023-03-14

我试图使用boto3创建一个Dynamodb表。但我得到以下错误:

"botocore.exceptions.ClientError:调用CreateTable操作时出错(ValidationExcture):无效的KeySchema:第一个KeySchemaElement不是HASH键类型"

更多信息:我的帐户中没有任何全局表。

我试过的代码

import boto3

client = boto3.client('dynamodb')

response = client.create_table(
    AttributeDefinitions=[
        {
            'AttributeName': 'student_id',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'student_name',
            'AttributeType': 'S'
        },
        {
            'AttributeName': 'course_id',
            'AttributeType': 'S'
        }
    ],
    TableName='students',
    KeySchema=[
        {
            'AttributeName': 'student_name',
            'KeyType': 'HASH'
        },
{
            'AttributeName': 'student_id',
            'KeyType': 'RANGE'
        },
    ],
    LocalSecondaryIndexes=[
        {
            'IndexName': 'course_id',
            'KeySchema': [
                {
                    'AttributeName': 'course_id',
                    'KeyType': 'RANGE'
                }
            ],
            'Projection': {
                'ProjectionType': 'ALL'
            }
        },
    ],
    BillingMode='PAY_PER_REQUEST',

)

共有1个答案

冯峻
2023-03-14

您也应该显式地为LSI指定HASH密钥。

import boto3

client = boto3.client('dynamodb')

response = client.create_table(
    AttributeDefinitions=[
        {
            'AttributeName': 'student_id',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'student_name',
            'AttributeType': 'S'
        },
        {
            'AttributeName': 'course_id',
            'AttributeType': 'S'
        }
    ],
    TableName='students',
    KeySchema=[
        {
            'AttributeName': 'student_name',
            'KeyType': 'HASH'
        },
        {
            'AttributeName': 'student_id',
            'KeyType': 'RANGE'
        },
    ],
    LocalSecondaryIndexes=[
        {
            'IndexName': 'course_id',
            'KeySchema': [
                {
                    'AttributeName': 'student_name',
                    'KeyType': 'HASH'
                },
                {
                    'AttributeName': 'course_id',
                    'KeyType': 'RANGE'
                }
            ],
            'Projection': {
                'ProjectionType': 'ALL'
            }
        },
    ],
    BillingMode='PAY_PER_REQUEST',

)
 类似资料:
  • 我正在terraform中创建具有以下模式的dynamodb表: 地形代码 并获得以下错误:aws_dynamodb_table。: AWS错误创建DynamoDB表:验证异常:检测到1个验证错误:值'KEYS-ONLY'在'global二级Indexes.1.member.projection.projection类型'未能满足约束:成员必须满足枚举值集:[ALL,包括,KEYS_ONLY] 这

  • org.h2.jdbc.jdbcsqlsyntaxerrorexception:SQL语句“create TABLE HIBERNATE_SEQUENCE(NEXT_VAL BIGINT)engine=[*]myisam”中存在语法错误;应为“标识符”

  • 我已经使用以下serverless.yml创建了Dynamodb表: 但我有一个问题: 出现错误:myTable-一个或多个参数值无效:KeySchema中的属性数与AttributeDefinitions中定义的属性数不完全匹配(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求ID:PEI9OT7E72HQN4N5MQUOIUQ18

  • 非常新的Laravel在这里,我很抱歉,如果问题是愚蠢的。我试图创建新的表,但得到这个错误 [PDOException]SQLSTATE[42S02]:找不到基表或视图:1146表“vvas.buildings”不存在 这是我的种子

  • 我们正在使用boto3为我们的DynamoDB,我们需要做一个完整的扫描我们的表,以便能够做到这一点,基于其他帖子,我们需要做一个分页。但是,我们无法找到分页的工作示例。这是我们所做的。 我们不知道如何将esk作为下一个查询的ExclusiveStartKey。ExclusiveStartkey参数的预期值应该是多少?我们在DynamoDB还是新手,还有很多东西需要学习,包括这个。谢谢

  • 我试图通过触发Python lambda表达式以编程方式将数据放入本地运行的DynamoDB容器中。 我正在尝试遵循此处提供的模板:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.03.html 我使用的是amazon/dynamodb local,您可以在此处下载:htt