Boto Dynamo DB错误

时间:2014-03-30 10:24:43

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

Boto SDK新手。我有以下单元测试来检查:

def test_dynamo():
  conn = DynamoDBConnection(
    host='localhost',
    port=8000,
    aws_secret_access_key='anything',
    is_secure=False)

  test_table = Table.create('table_for_test',schema=[HashKey('identifier',data_type=STRING)],connection=conn)
  # test_table = Table('test',connection=conn)
  unique_key = lskinesis_util.generate_unique_id()

  time.sleep(5)

  payload = {"identifier":unique_key,"stamp":"30/3/2014 14:39", "type":"testing-start","level":"info","source":"test-runner","user":{"id":5060342395,"first_name":"Alex"}}

  encoder = json.JSONEncoder()

  ejson = encoder.encode(payload)

  test_table.put_item(data=ejson)

  time.sleep(5)

  from_db = test_table.get_item(identifier=unique_key)

  assert from_db == ejson

  Table.delete()

当我运行它时,我收到以下错误:

E       AttributeError: 'str' object has no attribute 'keys'
你能告诉我在这里缺少什么吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

Dynamodb只能存储普通字典:

根据文件,

只需将数据字典和/或它将在服务器端创建项目。这本词典应该相对平坦(因为你可以嵌套在其他词典中)&必须包含架构中使用的密钥。

为了存储以下词典,

s = {'username':'anu', 'key':'1', 'value':'1', 'user_details':{'name':'Anu','age':'1'}}

d = base64.b64encode(json.dumps(s).encode('ascii'))

users.put_item(data={'key':'3','value':d})

即,您可以存储base64编码数据。

答案 1 :(得分:0)

好的我明白了。无需执行以下操作:

encoder = json.JSONEncoder()

ejson = encoder.encode(payload)

但是我现在又遇到了另一个问题:

E           TypeError: Unsupported type "<type 'dict'>" for value "{'first_name': 'Alex', 'id': 5060342395}"

知道为什么上述有效负载中的对象用户被视为字典?

由于