Boto Dynamo DB Error



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'

你能告诉我我在这里错过了什么吗?

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编码的数据

好吧,我明白了。没有必要这样做:

encoder = json.JSONEncoder()
ejson = encoder.encode(payload)

但是我现在有另一个问题:

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

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

谢谢

相关内容

  • 没有找到相关文章

最新更新