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'>