我已按照说明正确配置了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调用相同的代码,并且配置应该是隐式的。

最佳答案

嘿,我知道这很晚了,因为我一直在跟着您的线程处理相同的问题,就在回到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()

关于python - 通过PynamoDB与低级Botocore访问AWS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37120281/

10-11 07:01