gpt4 book ai didi

python - 编程错误 : column "X" is of type double precision but expression is of type numeric[]

转载 作者:行者123 更新时间:2023-12-03 15:52:11 26 4
gpt4 key购买 nike

我正在尝试使用 Django Rest Framework 和 Psycopg2 库编写 API。此 API 适用于 PostgreSQL 数据库。我需要在这个数据库中存储 2 个浮点数组字段,因为 API 与 2 个传感器一起使用,这些传感器将数据流式传输到 Android 应用程序,它们以两个数组的形式存储在应用程序中,并通过 JSON 发送到 API REST。

这些是我的 models.py、serializers.py 和 views_api.py:

模型.py

class DataTest(models.Model):
patient = models.ForeignKey(Patient)
label = models.CharField(max_length=36)
angle_data = ArrayField(models.FloatField())
emg_data = ArrayField(models.FloatField())
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)

def __unicode__(self):
return self.patient

Serializers.py
class DataTestSerializer(serializers.Serializer):
pk = serializers.IntegerField(read_only=True)
label = serializers.CharField()
angle_data = serializers.ListField(child=serializers.FloatField())
emg_data = serializers.ListField(child=serializers.FloatField())
patient = serializers.PrimaryKeyRelatedField(queryset=Patient.objects.all())

def create(self, validated_data):
return DataTest.objects.create(**validated_data)

def update(self, instance, validated_data):
instance.label = validated_data.get('label', instance.label)
instance.angle_data = validated_data.get('angle_data', instance.angle_data)
instance.emg_data = validated_data.get('emg_data', instance.emg_data)
instance.patient = validated_data.get('patient', instance.patient)
instance.save()
return instance

api.py
class DataTestList(APIView):

def get(self, request, format=None):
dataTests = DataTest.objects.all()
serializer = DataTestSerializer(dataTests, many=True)
return Response(serializer.data)

def post(self, request, format=None):
serializer = DataTestSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.error_messages,
status=status.HTTP_400_BAD_REQUEST)

最后,我测试了 API 并发送了一个 JSON 示例:
{
"label":"测试",
“角度数据”:[1.434, 2.243, 3.234],
"emg_data":[2.3, 2.1],
“病人”:1
}

我收到以下错误:

编程错误:列“angle_data”是 double 类型,但表达式是数字类型[] LINE 1: ..., “created_at”, “modified_at”) VALUES (1, 'Test', ARRAY[1.0,... ^

提示:您需要重写或转换表达式。

我已经调试了 API,我看到序列化程序收到一个浮点列表。我想问题是 PostgreSQL 中的列是 double 的,浮点列表没有用 double 编码。

有人可以帮我吗?

问候和谢谢你!!

最佳答案

我发现这篇文章在处理 Django 模型中的 JSON 数据时很有帮助
https://www.laurencegellert.com/2018/09/django-tricks-for-processing-and-storing-json/
我也用 https://github.com/django-json-api/django-rest-framework-json-api使用 DRF 获得格式更好的超媒体 RESTful API。还有 https://docs.djangoproject.com/en/dev/releases/3.1/#jsonfield-for-all-supported-database-backends
这更像是一个高级别的建议。

关于python - 编程错误 : column "X" is of type double precision but expression is of type numeric[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887116/

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