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

Pet*_*tch 11 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 怎么样?

Paw*_*Kam 12

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

\n

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

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

最简单的例子:

\n
from dynamodb_json import json_util as dynamodb_json\nfrom .models import YourModel\n\ndef get(request, partition_key):\n    table = boto3.resource(\n        \'dynamodb\',\n        aws_access_key_id=...,\n        aws_secret_access_key=...,\n        region_name=...,\n    ).Table(some_table_name)\n    try:\n        response = table.get_item(\n            Key={partition_key: partition_key})\n    except ClientError as e:\n        logger.warning(e.response[\'Error\'][\'Message\'])\n    else:\n        data_str = response[\'Item\']\n        _data_dict = dynamodb_json.loads(data_str)\n\n        # Validation and modification of incoming data goes here.\n        data_dict = validation_and_modification(_data_dict)\n        # Then you can do whatever you need, for example:\n        obj, created = YourModel.objects.update_or_create(**data_dict)\n        ...\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n


小智 0

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