我有这个 UserPydantic 模型
class UserPydantic(BaseModel):
model_config = ConfigDict(from_attributes=True)
name: str = Field(...)
email: str = EmailStr()
is_active: bool = Field(default=True)
is_admin: bool = Field(default=False)
created_at: datetime = Field(...)
我有这个基础:
class UserDB(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
name = Column(String, index=True)
email = Column(String, index=True, nullable=False, unique=True)
hashed_password = Column(String(length=255), nullable=False)
is_active = Column(Boolean, default=True, nullable=False)
is_admin = Column(Boolean, default=False, nullable=False)
created_at = Column(DateTime, default=current_timestamp(), nullable=False)
instagram_dms: Mapped[list["InstagramDmDB"]] = relationship("InstagramDmDB",
back_populates="user")
def to_pydantic(self) -> UserPydantic:
return UserPydantic(
name=self.name,
email=self.email,
is_active=self.is_active,
is_admin=self.is_admin,
created_at=self.created_at
)
但是,我遇到的问题是
to_pydantic
函数,其中 UserPydantic
期望名称为字符串,但 self.name
是 Column[str]
。这会导致问题,因为无论我在哪里使用 UserDB 类,即使我返回 Column[str]
或 .first()
,我的代码都应该在字段中键入 .one()
。我不确定我是否做错了什么,或者是否有不同/更好的方法来做这些事情。
这给我的
mypy
毒性测试带来了额外的问题。
使用 SQLAlchemy 2.0 中引入的新的 声明式映射 接口。它或多或少是类型安全的。 @M.O.