Dynamodb CREATE_TABLE呼叫失败
我跟进了dynamodb Python的教程上的8000端口 http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.01.htmlDynamodb CREATE_TABLE呼叫失败
from __future__ import print_function # Python 2/3 compatibility
import boto3
dynamodb = boto3.resource('dynamodb', aws_access_key_id="anything", aws_secret_access_key="anything", region_name='us-west-2', endpoint_url="http://localhost:8000")
table = dynamodb.create_table(
TableName='users',
KeySchema=[
{
'AttributeName': 'username',
'KeyType': 'HASH'
},
{
'AttributeName': 'last_name',
'KeyType': 'RANGE'
}
],
AttributeDefinitions=[
{
'AttributeName': 'username',
'AttributeType': 'S'
},
{
'AttributeName': 'last_name',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5
}
)
print("Table status:", table.table_status)
然而蟒蛇运行的代码与下面的问题没有设置当地dynomodb。
不知道是什么导致它。
Traceback (most recent call last):
File "C:\Users\rbharadw\workspace\dynamoDb\dynamoDb.py", line 32, in <module>
'WriteCapacityUnits': 5
File "Python\Python35\lib\site-packages\boto3\resources\factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "Python\Python35\lib\site-packages\boto3\resources\action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "Python\Python35\lib\site-packages\botocore\client.py", line 159, in _api_call
return self._make_api_call(operation_name, kwargs)
File "Python\Python35\lib\site-packages\botocore\client.py", line 483, in _make_api_call
operation_model, request_dict)
File "Python\Python35\lib\site-packages\botocore\endpoint.py", line 117, in make_request
return self._send_request(request_dict, operation_model)
File "Python\Python35\lib\site-packages\botocore\endpoint.py", line 144, in _send_request
request, operation_model, attempts)
File "Python\Python35\lib\site-packages\botocore\endpoint.py", line 203, in _get_response
response_dict, operation_model.output_shape)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 211, in parse
parsed = self._do_parse(response, shape)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 587, in _do_parse
parsed = self._parse_shape(shape, original_parsed)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 258, in _parse_shape
return handler(shape, node)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 522, in _handle_structure
raw_value)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 258, in _parse_shape
return handler(shape, node)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 522, in _handle_structure
raw_value)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 258, in _parse_shape
return handler(shape, node)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 522, in _handle_structure
raw_value)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 258, in _parse_shape
return handler(shape, node)
File "Python\Python35\lib\site-packages\botocore\parsers.py", line 539, in _handle_timestamp
return self._timestamp_parser(value)
File "Python\Python35\lib\site-packages\botocore\utils.py", line 327, in parse_timestamp
return datetime.datetime.fromtimestamp(value, tzlocal())
File "Python\Python35\lib\site-packages\dateutil\tz\tz.py", line 99, in utcoffset
if self._isdst(dt):
File "Python\Python35\lib\site-packages\dateutil\tz\tz.py", line 143, in _isdst
return time.localtime(timestamp+time.timezone).tm_isdst
OSError: [Errno 22] Invalid argument
但是它看起来像表得到的第二轮创建给出错误
botocore.exceptions.ClientError: An error occurred (ResourceInUseException) when calling the CreateTable operation: Cannot create preexisting table
任何建议!
这是由于boto使用的日期处理库之一的错误。
当你的时区偏移量是一个正数时就会出现这个错误。
您可以通过在导入boto(或其使用的库)之前插入以下代码来解决该问题。
import os
os.environ["TZ"] = "UTC"
这不适用于我(Windows 10 64位,Python 3.5.1,而是我做了一个变通,如果'timestamp + time.timezone NikoNyrh
你是英雄,你救了我的痛苦和泪水 –
不幸的是,设置os.environ [“TZ”] =“UTC”不适用于我。
因此,我遵循一个线程,找到site-packages \ dateutil \ tz \ tz.py文件。在DEF _naive_is_dst(个体经营,DT)功能,它变成
# workaround the bug of negative offset UTC prob
if timestamp+time.timezone < 0:
current_time = timestamp + time.timezone + 31536000
else:
current_time = timestamp + time.timezone
return time.localtime(current_time).tm_isdst
def _naive_is_dst(self, dt):
timestamp = _datetime_to_timestamp(dt)
if timestamp+time.timezone < 0:
current_time = timestamp + time.timezone + 31536000
else:
current_time = timestamp + time.timezone
return time.localtime(current_time).tm_isdst
而是改变tz.py文件,我决定把陈望的做法,但我自己的实现覆盖_naive_is_dst保持tz.py不变。
if os.name == 'nt':
def _naive_is_dst(self, dt):
timestamp = tz.tz._datetime_to_timestamp(dt)
# workaround the bug of negative offset UTC prob
if timestamp+time.timezone < 0:
current_time = timestamp + time.timezone + 31536000
else:
current_time = timestamp + time.timezone
return time.localtime(current_time).tm_isdst
tz.tzlocal._naive_is_dst = _naive_is_dst
看起来你已经有了一个名为“users”的表。 – garnaat
是的,第二次运行是不能创建预先存在的表的错误。 但是,我在第一次运行时遇到了特定于时间的错误 –
这看起来像是“datetutils”,Windows平台和可能的32位版本的Python之间的问题。这个线程是相关的(https://github.com/dateutil/dateutil/issues/197),但似乎没有提供一个简单的答案,但可能会有所帮助。 – garnaat