通过 PynamoDB 与低级 botocore 访问 AWS

mar*_*tin 2 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')
Run Code Online (Sandbox Code Playgroud)

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

但是,我正在尝试按照文档中的教程并为表创建模型来通过 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()
Run Code Online (Sandbox Code Playgroud)

并通过模型上的适当方法再次描述表格

print MyTableModel.describe_table()
Run Code Online (Sandbox Code Playgroud)

我得到错误

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

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

Noo*_*fri 5

嘿,我知道现在已经很晚了,因为我正在跟进您的线程遇到同样的问题,就在回到 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()
Run Code Online (Sandbox Code Playgroud)