通过 PynamoDB 访问 AWS 与低级 botocore
Accessing AWS through PynamoDB vs. low-level botocore
我已经按照说明正确配置了 AWS CLI,我想从高级包 PynamoDB 而不是 boto3 访问 DynamoDB table。
如果我尝试通过 boto3 和 PynamoDB 使用的低级 botocore 包访问我的 AWS 集群,并连接到 DynamoDB table作为
import botocore.session
session = botocore.session.get_session()
client = session.create_client('dynamodb')
client.describe_table(TableName='my_table_name')
一切正常,table 访问正常。
但是,我正在尝试通过 PynamoDB 访问,方法是按照文档中的教程并为 table 创建一个模型,如
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()
并通过模型上的适当方法再次描述 table
print MyTableModel.describe_table()
我收到错误
pynamodb.exceptions.TableDoesNotExist: Table does not exist:
Requested resource not found: Table: my_table_name not found
我不明白为什么我已经深入研究了 PynamoDB 代码,我似乎理解的是它应该从 botocore 调用相同的代码并且配置应该是隐式的。
这可能是区域配置错误的问题。看起来 pynamo 不尊重配置的区域,你必须明确地将它传递给你想要的区域。否则,你会得到 us-east-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()
我已经按照说明正确配置了 AWS CLI,我想从高级包 PynamoDB 而不是 boto3 访问 DynamoDB table。
如果我尝试通过 boto3 和 PynamoDB 使用的低级 botocore 包访问我的 AWS 集群,并连接到 DynamoDB table作为
import botocore.session
session = botocore.session.get_session()
client = session.create_client('dynamodb')
client.describe_table(TableName='my_table_name')
一切正常,table 访问正常。
但是,我正在尝试通过 PynamoDB 访问,方法是按照文档中的教程并为 table 创建一个模型,如
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()
并通过模型上的适当方法再次描述 table
print MyTableModel.describe_table()
我收到错误
pynamodb.exceptions.TableDoesNotExist: Table does not exist:
Requested resource not found: Table: my_table_name not found
我不明白为什么我已经深入研究了 PynamoDB 代码,我似乎理解的是它应该从 botocore 调用相同的代码并且配置应该是隐式的。
这可能是区域配置错误的问题。看起来 pynamo 不尊重配置的区域,你必须明确地将它传递给你想要的区域。否则,你会得到 us-east-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()