2014-12-29 65 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(); 
    });  
});