メモの日々


2024年10月08日(火) [長年日記]

[python] SQLModelのdatetimeに対する動作

どうしてそうなるのかは理解できていないが、事実をメモ。

SQLModel0.0.22を使っている。

datetime型のフィールドを持つモデルを定義して、そのmodel_validate_json()によりJSONからのでシリアライズを行ったときに次のようになる。

  • table=True無しで定義したモデルはdatetime型のフィールドにdatetime型の値が格納される
  • table=True有りで定義したモデルはdatetime型のフィールドにstr型の値が格納されてしまう

検証コードと実行結果を示す。

from datetime import datetime

from sqlmodel import Field, SQLModel


class A(SQLModel):
    id: int = Field(primary_key=True)
    dt: datetime


class B(SQLModel, table=True):
    id: int = Field(primary_key=True)
    dt: datetime


json = '{ "id": 1, "dt": "2024-01-02T03:45:06+09:00" }'
a = A.model_validate_json(json)
b = B.model_validate_json(json)
print(type(a.dt))
print(type(b.dt))
<class 'datetime.datetime'>
<class 'str'>