如何在Django中使用AWS的Dynamo Db?

时间:2019-05-03 20:08:27

标签: python django orm nosql amazon-dynamodb

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

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

虽然我认为Django允许一个人为DBMS实现自己的接口,但如果存在,则在构造一个Django模型时使用现有的DBMS接口显然是有利的。

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

一个人使用MongoDB怎么样?

5 个答案:

答案 0 :(得分:1)

您可以尝试Dynamorm或pynamoDB。我没有尝试过,也许他们可以帮忙。

答案 1 :(得分:0)

AWS DynamoDB没有Django模型接口,但是您可以使用AWS提供的boto3软件从该类型的数据库中检索数据。

答案 2 :(得分:0)

这不像现成的用于django的电池,但是无论如何都值得一看。 https://github.com/pynamodb/PynamoDB

答案 3 :(得分:0)

正如其他人所写,Django没有NoSQL DBMS。有第三方软件包,但考虑到NoSQL数据的灵活性,如@slajma所说,没有“现成的电池”。

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)
        ...

希望这对某人有帮助。在serverless repo中可以找到创建,删除,列出和更新视图的示例。

答案 4 :(得分:-1)

DynamoDB是非关系的,我认为它在体系结构上与Django之类的ORM不兼容。