Pydantic не может сериализовать данные FastAPI ⇐ Python
-
Гость
Pydantic не может сериализовать данные FastAPI
Я попробовал несколько способов исправить эту ошибку, но так и не понял, в чем проблема.
маршрутизатор:
@router.get('', response_model=List[SProject]) асинхронная защита get_all_projects(): возвращение ждет ProjectDAO.find_all() модели:
класс ProjectProfile(Base): __tablename__ = 'project_profile' project_id = Столбец (ForeignKey («projects.id»), Primary_key = True) Profile_id = Столбец (ForeignKey («profiles.id»), Primary_key = True) роль = Столбец('роль', Строка) is_creator = Столбец (логическое значение, по умолчанию = False) Проект класса (База): __tablename__ = 'проекты' id = Столбец (Целое число, Primary_key = True) заголовок = Столбец (строка, значение nullable = False) описание = Столбец (Строка) созданный_at = Столбец (Дата, по умолчанию = datetime.utcnow()) профили = отношения('Профиль', Secondary='project_profile', back_populates='проекты') схемы:
класс SProject(BaseModel): идентификатор: интервал Название: ул. описание: Необязательный[str] = Нет созданный_at: Необязательно[датавремя] = Нет Конфигурация класса: orm_mode = Истина дао:
класс ProjectDAO(BaseDAO): модель = Проект @classmethod асинхронная защита find_all (cls): асинхронно с async_session_maker() в качестве сеанса: запрос = выберите (cls.model) результат = ожидание session.execute(запрос) вернуть результат.mappings().all() ответ:
поднять ResponseValidationError( fastapi.Exceptions.ResponseValidationError: 2 ошибки проверки: {'type': 'отсутствует', 'loc': ('response', 0, 'id'), 'msg': 'Обязательное поле', 'input': {'Project': }, 'url': 'https://errors.pydantic.dev/2.3/v/missing'} {'type': 'отсутствует', 'loc': ('response', 0, 'title'), 'msg': 'Обязательное поле', 'input': {'Project': }, 'url': 'https://errors.pydantic.dev/2.3/v/missing'} Если я удалю схему SProject из роутера, она вернет данные нормально
Нравится
маршрутизатор:
@router.get('') асинхронная защита get_all_projects(): возвращение ждет ProjectDAO.find_all() ответ:
[ { "Проект": { "create_at": "20 сентября 2023 г.", «идентификатор»: 2, "description": "сдадасд", "title": "дасд" } } ]
Я попробовал несколько способов исправить эту ошибку, но так и не понял, в чем проблема.
маршрутизатор:
@router.get('', response_model=List[SProject]) асинхронная защита get_all_projects(): возвращение ждет ProjectDAO.find_all() модели:
класс ProjectProfile(Base): __tablename__ = 'project_profile' project_id = Столбец (ForeignKey («projects.id»), Primary_key = True) Profile_id = Столбец (ForeignKey («profiles.id»), Primary_key = True) роль = Столбец('роль', Строка) is_creator = Столбец (логическое значение, по умолчанию = False) Проект класса (База): __tablename__ = 'проекты' id = Столбец (Целое число, Primary_key = True) заголовок = Столбец (строка, значение nullable = False) описание = Столбец (Строка) созданный_at = Столбец (Дата, по умолчанию = datetime.utcnow()) профили = отношения('Профиль', Secondary='project_profile', back_populates='проекты') схемы:
класс SProject(BaseModel): идентификатор: интервал Название: ул. описание: Необязательный[str] = Нет созданный_at: Необязательно[датавремя] = Нет Конфигурация класса: orm_mode = Истина дао:
класс ProjectDAO(BaseDAO): модель = Проект @classmethod асинхронная защита find_all (cls): асинхронно с async_session_maker() в качестве сеанса: запрос = выберите (cls.model) результат = ожидание session.execute(запрос) вернуть результат.mappings().all() ответ:
поднять ResponseValidationError( fastapi.Exceptions.ResponseValidationError: 2 ошибки проверки: {'type': 'отсутствует', 'loc': ('response', 0, 'id'), 'msg': 'Обязательное поле', 'input': {'Project': }, 'url': 'https://errors.pydantic.dev/2.3/v/missing'} {'type': 'отсутствует', 'loc': ('response', 0, 'title'), 'msg': 'Обязательное поле', 'input': {'Project': }, 'url': 'https://errors.pydantic.dev/2.3/v/missing'} Если я удалю схему SProject из роутера, она вернет данные нормально
Нравится
маршрутизатор:
@router.get('') асинхронная защита get_all_projects(): возвращение ждет ProjectDAO.find_all() ответ:
[ { "Проект": { "create_at": "20 сентября 2023 г.", «идентификатор»: 2, "description": "сдадасд", "title": "дасд" } } ]
Мобильная версия