通过PynamoDB与低级别botocore访问AWS

时间:2016-05-09 15:57:25

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

我按照说明正确配置了AWS CLI,我想从高级包PynamoDB而不是boto3访问DynamoDB表。

如果我尝试通过boto3和PynamoDB使用的低级 botocore 程序包访问我的AWS群集,并以

连接到DynamoDB表
import botocore.session
session = botocore.session.get_session()
client = session.create_client('dynamodb')
client.describe_table(TableName='my_table_name')

一切正常,表格可以正常访问。

但是,我试图通过遵循文档中的教程并为表创建模型来访问PynamoDB,如

from pynamodb.models import Model

class MyTableModel(Model):

    class Meta:
        table_name = 'my_table_name'

    pk_field = UnicodeAttribute(hash_key=True)
    field1 = UnicodeAttribute()
    field2 = UnicodeAttribute()

再次通过模型

上的适当方法描述表格
print MyTableModel.describe_table()

我收到错误

  

pynamodb.exceptions.TableDoesNotExist:表不存在:   Requested resource not found: Table: my_table_name not found

我不明白为什么我已经深入研究了PynamoDB代码,而我似乎理解的是它应该从botocore调用相同的代码并且配置应该是隐式的。

2 个答案:

答案 0 :(得分:1)

嘿,我知道现在很晚了,因为我一直在跟你的线程打同样的问题,而在回到Boto之前,我明确使用了@Jordon Phillips提到的区域,它就像一个魅力。

from pynamodb.models import Model

class MyTableModel(Model):

    class Meta:
        table_name = 'my_table_name'
        region = os.environ['Region'] #its region I get from serverless.yml

    pk_field = UnicodeAttribute(hash_key=True)
    field1 = UnicodeAttribute()
    field2 = UnicodeAttribute()

答案 1 :(得分:0)

这可能是一个配置错误的地区。看起来pynamo不尊重配置的区域,您必须明确地将它传递给您想要的区域。否则,您将获得us-east-1