如何正确输入与pydantic一起使用的sqlalchemy模型?

问题描述 投票:0回答:1

我有这个 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 python-typing pydantic
1个回答
-1
投票

使用 SQLAlchemy 2.0 中引入的新的 声明式映射 接口。它或多或少是类型安全的。 @M.O.

© www.soinside.com 2019 - 2024. All rights reserved.