【发布时间】:2022-11-06 16:26:01
【问题描述】:
我有一些使用 boto3 (python) DynamoDB Table 对象来查询数据库的现有代码:
import boto3
resource = boto3.resource("dynamodb")
table = resource.table("my_table")
# Do stuff here
我们现在想使用 DynamoDB Local 运行此代码的测试,而不是正确连接到 DynamoDB,以尝试让它们运行得更快并节省资源。为此,我收集到我需要使用客户端对象,而不是表对象:
import boto3
session = boto3.session.Session()
db_client = session.client(service_name="dynamodb", endpoint_url="http://localhost:8000")
# Do slightly different stuff here, 'cos clients and tables work differently
但是,确实存在相当多的现有代码,以至于重写所有内容以使用客户端而不是表的成本可能会令人望而却步。
有没有办法在指定 endpoint_url 时获取表对象,以便在创建时将其指向 DynamoDB Local,或者从 boto3 dynamodb 客户端对象获取 boto3 dynamodb 表对象?
PS:我知道我也可以模拟 boto3 调用而不访问数据库。但这也太昂贵了,因为对于所有现有的测试,我们必须弄清楚它们在哪里接触数据库以及适当的模拟设置和使用是什么。对于几个测试来说这很好,但如果你有很多测试,那就需要做很多工作了。
【问题讨论】:
-
使用
resource = boto3.resource('dynamodb', endpoint_url='http://localhost:8000'),然后使用table = resource.Table(name)? -
原来如此,谢谢!我没有设法在文档中找到足够的方法来意识到您可以使用资源来做到这一点。如果您将其发布为答案而不是评论,我会接受它。 :-)
标签: amazon-web-services amazon-dynamodb boto3