Pydantic.from_orm()自动数据对话

2024-05-29 11:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些包含数据的表,我想返回给用户,而不是电话对象,一个字符串。有一个例子

import pydantic
import sqlalchemy
from typing import Optional

class Base(pydantic.BaseModel):
    class Config:
        orm_mode = True


class PhoneOrm:
    id = sqlalchemy.Column(
        sqlalchemy.Integer,
        primary_key=True
    )
    number = sqlalchemy.Column(
        sqlalchemy.String(length=16)
    )

    def __str__(self):
        return f"+{self.number}"


class PhoneModel(Base):
    id: int
    number: str = pydantic.Field(min_length=12, max_length=16)

    def __str__(self):
        return f"+{self.number}"


class UserOrm:
    id = sqlalchemy.Column(
        sqlalchemy.Integer,
        primary_key=True
    )
    name = sqlalchemy.Column(
        sqlalchemy.String(length=128)
    )
    phone_id = sqlalchemy.Column(
        sqlalchemy.Integer,
        sqlalchemy.ForeignKey('phone.id', ondelete='cascade')
    )
    phone = sqlalchemy.orm.relationship(
        "PhoneOrm",
        uselist=False,
    )


class UserModel:
    id: int
    name: str
    phone: Optional[str]


phone = PhoneOrm('799999999999')
user = UserOrm(name='John', phone=phone)

print(UserModel.from_orm(user)) 

我发现了一个例外

1 validation error for UserModel
   phone
      str type expected (type=type_error.str)

但所有电话类都有数据类型对话

我想得到{'id':1,'name':'John','phone':'799999999'}

我该怎么做


Tags: nameimportselfidtruenumbersqlalchemyorm

热门问题