Каждый CSV-файл содержит около 40 полей с неизвестными типами данных (кроме поля ID).
Некоторые поля могут быть необязательными или пустыми.
Общий размер данных составляет около 60 МБ.
API должен вернуть объект JSON, содержащий 6 пар ключ-значение, где каждое значение представляет собой массив объектов, соответствующий одному CSV-файлу.
Фрагмент высмеиваемой версии данных:
Код: Выделить всё
{
"fruits": [
{
"name": "apple",
"color": "red",
"weight": 150
},
{
"name": "banana",
"color": "yellow",
"weight": 120
},
{
"name": "orange",
"color": "orange",
"weight": 140
}
],
"animals": [
{
"species": "lion",
"habitat": "savanna",
"lifespan": 15
},
{
"species": "dolphin",
"habitat": "ocean",
"lifespan": 25
},
{
"species": "eagle",
"habitat": "mountains",
"lifespan": 20
}
],
......
]
}
Я создал 6 различных базовых моделей Pydantic (по одной для каждого CSV-файла) и ResponseModel:
Код: Выделить всё
class ResponseModel(BaseModel):
fruits: Optional[List[FruitModel]]
animals: Optional[List[AnimalModel]]
cities: Optional[List[CityModel]]
books: Optional[List[BookModel]]
cars: Optional[List[CarModel]]
planets: Optional[List[PlanetModel]]
Этот подход недостаточно гибок для обработки возможных изменений схемы в файлах CSV, а создание моделей для 40 полей в файле вручную может привести к ошибкам.
p>
Вопросы:
[*]Как я могу динамически создавать модели Pydantic на основе содержимого CSV-файла
во время выполнения?< /li>
Каков эффективный способ определения типов полей и
обработки необязательных полей при создании этих динамических моделей?
[*]Как я могу изменить свою ResponseModel, чтобы адаптировать эти динамические модели?
[*]Есть ли какие-либо соображения по производительности, которые мне следует учитывать при
работе с 60 МБ данных таким образом?
Я ищу конкретное решение, которое позволит мне обрабатывать эти CSV-файлы с неизвестными и потенциально изменяющимися схемами, сохраняя при этом возможности проверки Pydantic в моем приложении FastAPI.
Я пробовал перебирать строки, но это происходило каждый раз при вызове API. Я также пытался сохранить базовые модели в памяти, но это вызвало бы проблемы с сервером. Следовательно, я не понимаю, правильно ли я использую пидантик или нет.
Подробнее здесь: https://stackoverflow.com/questions/790 ... dantic-and