如何将ddbmock与dynamodb-mapper一起使用?

3 投票
1 回答
656 浏览
提问于 2025-04-17 14:16

有人能解释一下怎么设置 dynamodb_mapper(还有 boto)来使用 ddbmock,并且用sqlite作为后端,来替代 Amazon DynamoDB 进行功能测试吗?

目前,我尝试了“普通”的boto,并且成功地通过本地启动ddbmock服务器来让它和sqlite一起工作,连接方式如下:

db = connect_boto_network(host='127.0.0.1', port=6543)

然后我用这个db对象来进行所有的数据库操作。不过,dynamodb_mapper是通过这种方式来获取数据库连接的:

conn = ConnectionBorg()

我理解的是,它使用boto的默认方式来连接(真正的)DynamoDB。所以我在想,是否有一种(推荐的?)方法可以让ConnectionBorg()连接到我本地的ddbmock服务器,就像我之前用boto那样?谢谢任何建议。

1 个回答

3

库模式

在库模式下,而不是服务器模式:

import boto
from ddbmock import config
from ddbmock import connect_boto_patch

# switch to sqlite backend
config.STORAGE_ENGINE_NAME = 'sqlite'
# define the database path. defaults to 'dynamo.db'
config.STORAGE_SQLITE_FILE = '/tmp/my_database.sqlite'

# Wire-up boto and ddbmock together
db = connect_boto_patch()

通过boto访问dynamodb服务时,实际上会使用一个叫做ddbmock的东西。

服务器模式

如果你还是想在服务器模式下使用ddbmock,我建议你在测试代码的最开始就修改一下 ConnectionBorg._shared_state['_region']

ConnectionBorg._shared_state['_region'] = RegionInfo(name='ddbmock', endpoint="localhost:6543")

据我所知,在这些代码之后,通过任何 ConnectionBorg 实例访问dynamodb时,都会使用ddbmock的入口。

不过,我自己从来没有测试过这个。我会确保联系ddbmock的作者,看看他们能否提供一些更新信息。

撰写回答