gpt4 book ai didi

python - 如何在 Django Rest Framework 序列化程序中捕获 sql 错误?

转载 作者:行者123 更新时间:2023-12-05 03:54:07 26 4
gpt4 key购买 nike

我有一个 Django Rest Framework 端点,外部方向其发送大量数据。因为它每秒运行大约 200 次插入,所以我检查了它进行的查询。我发现它其实是先做了一个SELECT查询来检查是否有重复的id。因为我不认为会有任何(或至少没有很多)重复键,所以我想禁用该检查。所以我将这一行添加到我的序列化程序中:

id = serializers.UUIDField(validators=[])  # Disable the validators for the id, which improves performance (rps) by over 200%

正如您在评论中看到的那样,它大大提高了性能。然而,它的一个缺点是如果实际上发布了重复的 key ,它会给出 500 错误,说

duplicate key value violates unique constraint

我怎样才能捕捉到这个数据库错误并返回一个简洁的响应而不是抛出这个 500 错误?

最佳答案

一种方法是覆盖序列化程序的 create 方法来捕获错误。

from django.db import IntegrityError
from django.core.exceptions import ValidationError

from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):

[ ... ]

def create(self, validated_data):
try:
return super().create(validated_data)
except IntegrityError as e:
raise serializers.ValidationError(str(e))

如果您允许在对象上使用 PUT,您还必须重写序列化程序的 update

根据您的用例,放置 Hook 可能会更好。它必须位于序列化程序的某个位置,并且 try-catch 必须位于调用对象 save() 方法的位置附近。对您来说,使用与上面大致相同的代码覆盖序列化程序的 save() 方法可能会奏效。

关于python - 如何在 Django Rest Framework 序列化程序中捕获 sql 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61309539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com