我正在开发一个使用 SQLModel 作为 ORM 的 FastAPI 项目。据我了解,SQLModel 是 sqlalchemy 和 pydantic 之上的某种包装器,可以使两者协同工作。我有一个看起来像这样的模型:
from psycopg2.extras import DateTimeTZRange
from pydantic import conlist
from sqlalchemy import Column
from sqlalchemy.dialects.postgresql import TSTZRANGE
from sqlmodel import Field
from app.models.base import BaseModel
class MyModel(BaseModel, table=True):
# time_range: conlist(datetime, min_items=2, max_items=2) = Field(
time_range: DateTimeTZRange = Field(
sa_column=Column(TSTZRANGE()), nullable=False, index=False
)
class Config:
arbitrary_types_allowed = True
当我尝试保存此模型的实例时,出现以下错误:
sqlalchemy.exc.DBAPIError: (sqlalchemy.dialects.postgresql.asyncpg.Error) <class 'asyncpg.exceptions.DataError'>: invalid input for query argument $1: DateTimeTZRange(datetime.datetime(2019, ... (list, tuple or Range object expected (got type <class 'psycopg2._range.DateTimeTZRange'>))
[SQL: INSERT INTO my_model (time_range) VALUES (%s) RETURNING my_model.id]
[parameters: (DateTimeTZRange(datetime.datetime(2019, 4, 2, 23, 0, tzinfo=<UTC>), datetime.datetime(2019, 4, 2, 23, 30, tzinfo=<UTC>), '[)'))]
注释行(使用conlist
)没有给出任何错误,但它总是保存null
到数据库中。我在网上找不到任何关于如何完成这项工作的资源或文档。有什么想法我可能做错了吗?