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'
你能告诉我在这里缺少什么吗?提前谢谢。
答案 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}"
知道为什么上述有效负载中的对象用户被视为字典?
由于