python - 如何将 AWS 的 Dynamo Db 与 Django 结合使用?

标签 python django orm nosql amazon-dynamodb

我正在使用 Django MVC 框架开发 Web 应用程序、API 和后端。 Django 的一个主要方面是它对模型的 ORM 实现。这是一个非常好的 ORM。通常,在使用 Django 时,人们会利用现有的接口(interface)将 Django 模型映射到特定的 DBMS,例如 Postgres、MySQL 或 Oracle。

我有一些关于性能和可扩展性的特定需求,所以我真的很想使用 AWS 的 Dynamo DB,因为它具有极高的成本效益、非常高性能,并且可扩展性非常好。

虽然我认为 Django 允许人们为 DBMS 实现自己的接口(interface)(如果有人愿意),但在构建 Django 模型时能够使用现有的 DBMS 接口(interface)(如果存在)显然是有利的。

有人可以推荐一个 Django 模型接口(interface)来使用,以便我可以在 Django 中构建一个使用 AWS Dynamo DB 的模型吗?

使用 MongoDB 怎么样?

最佳答案

正如其他人所写,Django没有NoSQL DBMS支持,但有第三方包。

PynamoDB看起来不错,但我没用过,所以不推荐。在我遇到的所有用例中,boto3 就足够了。设置非常简单,但问题在于细节(准确地说,是数据结构及其嵌套方式)。基本上需要三个步骤:

  1. 连接数据库并执行您想要的操作 ( boto3 )
  2. 将传入数据解析到 Python 字典中(例如使用 dynamodb-jsonboto3.dynamodb.types.TypeDeserializer 或者您可以构建自己的字典)
  3. 执行业务逻辑,使用 Django ORM 或任何您需要的内容将数据存储到关系数据库中

最简单的例子:

from dynamodb_json import json_util as dynamodb_json
from .models import YourModel

def get(request, partition_key):
    table = boto3.resource(
        'dynamodb',
        aws_access_key_id=...,
        aws_secret_access_key=...,
        region_name=...,
    ).Table(some_table_name)
    try:
        response = table.get_item(
            Key={partition_key: partition_key})
    except ClientError as e:
        logger.warning(e.response['Error']['Message'])
    else:
        data_str = response['Item']
        _data_dict = dynamodb_json.loads(data_str)

        # Validation and modification of incoming data goes here.
        data_dict = validation_and_modification(_data_dict)
        # Then you can do whatever you need, for example:
        obj, created = YourModel.objects.update_or_create(**data_dict)
        ...

创建、删除、列表和更新 View 的示例可以在 serverless repo 中找到。 .

关于python - 如何将 AWS 的 Dynamo Db 与 Django 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976471/

相关文章:

django - 在 heroku 上运行 loaddata 而不将数据文件添加到存储库

django - Django 中的 login_required 装饰器

mysql - 带添加的环回更新

spring - MongoDB 的 Morphia、Mongo4j 和 Spring 数据如何比较?

python - 在 jupyter/ipython notebook 中设置优先级/niceness

python - 如何删除数据框中间隔之间的值

python - 如何获取有序集?

python - 高效的python聊天服务器

python - Django:GET css 返回 404?

python - Django内置的Web服务器: Usage and Reliability Concerns