我正在使用 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 就足够了。设置非常简单,但问题在于细节(准确地说,是数据结构及其嵌套方式)。基本上需要三个步骤:
- 连接数据库并执行您想要的操作 ( boto3 )
- 将传入数据解析到 Python 字典中(例如使用 dynamodb-json 、 boto3.dynamodb.types.TypeDeserializer 或者您可以构建自己的字典)
- 执行业务逻辑,使用 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/