Поскольку вы используете SQLAlchemy и Flask, я бы предложил использовать SQLAthanor , библиотеку сериализации для SQLAlchemy с интеграциями для Flask и Flask-SQLAlchemy (полное описание: я являюсь авторомSQLAthanor)
По сути, SQLAthanor позволяет вам определять пользовательские правила сериализации и десериализации для ваших декларативных моделей SQLAlchemy, а затем читать данные из CSV, JSON или YAML для создания записей / экземпляров.
Документация довольно обширна и действительно показывает весь спектр возможностей, но по сути:
- вы можете определить различные правила для сериализации (вывод в CSV /JSON / YAML против десериализации (чтение из CSV / JSON / YAML), которая может быть полезна в целях безопасности, например
- чтение числовых или других данных из CSV и преобразование их в соответствующие типы данных для представления вашей базы данных
- чтение из файлов или строк
- применение настраиваемой логики предварительной обработки при повторномдобавление данных или запись данных
Учитывая приведенный выше код вашей модели, вот пример того, как вы можете читать соответствующие записи из CSV:
import csv
my_record_instances = []
with open('large-data.csv', 'r') as csv_file:
csv_records = csv.reader(csv_file, delimiter = ',')
for row in csv_records:
my_instance = Asset.new_from_csv(','.join(row),
delimiter = ',')
my_record_instances.append(my_instance)
То, что приведенный выше код делает это первымсоздает класс декларативной модели, который поддерживает сериализацию и десериализацию, затем перебирает каждую строку файла CSV и создает экземпляр класса декларативной модели.Затем он добавляет этот экземпляр в список экземпляров записей.Теперь вы можете взаимодействовать с этими экземплярами так же, как вы обычно взаимодействуете с любым экземпляром модели SQLAlchemy.
Обратите внимание, что для правильной работы приведенного выше кода вам нужно будет включить SQLAthanor в определение модели, котороена самом деле довольно легко.Для получения дополнительной информации см. Использование SQLAthanor .
Вот некоторые ссылки на соответствующую документацию, которая может оказаться вам полезной:
Надеюсь, это поможет!