2014-12-29 51 views
1

我正在使用boto DynamoDBV2接口创建并填充DynamoDB中的表。我为它的代码看起来是这样的 -DynamoDB表正在创建,但无法插入新项目

my_table = Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection) 
my_table.put_item(data={ 
     'key': 'somekey', 
     'value': value 
     }) 

我创建了连接,当我运行它,正确地创建了表,我可以看到它在AWS控制台。但在尝试将值放入表格时,我收到错误“Requested Resource not found”。

我也试过单独读取表,然后插入值这样的 -

Table.create(table_name, schema=[HashKey('key', data_type=STRING)], connection = self.connection) 
my_table = Table(table_name, self.connection) 
my_table.put_item(data={ 
     'key': 'somekey', 
     'value': value 
     }) 

,但仍然获得在第二行相同的错误。我错过了什么?

+1

可以捕获并添加错误的完整回溯? – NoamG

回答

1

您的表格在创建时不会立即准备就绪,您必须等待它在写入之前变为活动状态。我找到了一个Java code sample,它说明了如何执行此操作,但问题不是语言特定的,它适用于任何DynamoDB客户端。

您可以在AWS管理控制台中将此视为表的“状态”,以确认或否认此理论。

1

问题是,在插入项目之前,您需要稍等一下创建表格。您可以使用waitFor()事件来查找何时完成表创建。

与AWS节点SDK举例:

const AWS = require('aws-sdk'); 
const dynamodb = new AWS.DynamoDB(); 

const createTableParams = { 
    // parameters... 
} 

dynamodb.createTable(createTableParams, (err, data) => { 
    if (err) return console.log(err, err.stack); 

    const params = { 
     TableName: 'MY_TABLE' 
    }; 

    dynamodb.waitFor('tableExists', params, (err, data) => { 
     if (err) console.log(err, err.stack); 
     else  insertData(); 
    });  
});