首页 > 解决方案 > Tortoise ORM - 具有 Postgresql 时间字段的 Pydantic 模型

问题描述

我正在尝试使用以 Postgresql 作为后端的 Tortoise ORM 创建 Pydantic 模型。我有列start_timeend_time在 Postgres 中定义为时间数据类型。我尝试了我的课程如下:

class Carb_Ratio(models.Model):
    id = fields.UUIDField(pk=True, auto_generated=True)
    client_id = fields.UUIDField()
    ratio_type = fields.CharEnumField(RatioType)
    carb_ratio = fields.DecimalField(max_digits=10, decimal_places=2)
    start_time = fields.CharField(max_length=8)
    end_time = fields.CharField(max_length=8)
    insulin_sensitivity = fields.DecimalField(max_digits=10, decimal_places=2)
    created_at = fields.DatetimeField(auto_now_add=True)

当我尝试创建记录时,我最终收到一条错误消息“tortoise.exceptions.OperationalError:查询参数 $5 的无效输入:''('str' 对象没有属性'hour')”

Tortoise 字段没有 TimeField,我什至尝试使用字段。DatetimeField 给了我“08:00:00”的无效日期时间格式

任何指向正确方向的指针都会有所帮助。提前致谢

更新:@Adrian Klaver 谢谢你的建议。我已将这些字段更改为 DatetimeField

    start_time = fields.DatetimeField()
    end_time = fields.DatetimeField()

我的输入值必须从

{
  "client_id": "9181233d-0fa3-4844-bb28-ba1660be1415",
  "ratio_type": "time_range",
  "carb_ratio": 16,
  "start_time": "17:00:01",
  "end_time": "21:00:00",
  "insulin_sensitivity": 6
}

{
  "client_id": "9181233d-0fa3-4844-bb28-ba1660be1415",
  "ratio_type": "time_range",
  "carb_ratio": 16,
  "start_time": "1900-01-01 17:00:01",
  "end_time": "1900-01-01 21:00:00",
  "insulin_sensitivity": 6
}

现在它能够正确插入值。然而,选择函数现在出现“iso8601.iso8601.ParseError: Expecting a string datetime.time(10, 0)”错误

标签: pythonpostgresqlormpydantictortoise-orm

解决方案


推荐阅读