Как создать динамическую таблицу базы данных с помощью файла csv в django или DRF

Я собираюсь создать таблицу базы данных, используя файл csv без модели в django. Шаги следующие: после отправки csv файла по post запросу, будет создана одна таблица базы данных в соответствии с заголовками csv (name, university, score, total_score etc). И она будет заполнена данными из csv файла. Имя таблицы базы данных должно быть производным от имени файла csv. Я искал, но не смог найти хорошего решения. Любая помощь будет принята с благодарностью. Ниже приведен мой код для чтения файла csv class UploadProductApiView(generics.CreateAPIView): serializer_class = FileUploadSerializer

def post(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    file = serializer.validated_data['file']
    decoded_file = file.read().decode()
    # upload_products_csv.delay(decoded_file, request.user.pk)
    io_string = io.StringIO(decoded_file)
    reader = csv.reader(io_string)
    for row in reader:
        print(row)

Вы всегда можете создать динамическую модель Django: https://code.djangoproject.com/wiki/DynamicModels

При таком подходе вы могли бы создавать модели на лету, выполнив этот фрагмент

from django.core.management import call_command
call_command('makemigrations')
call_command('migrate')

вы можете перенести модель в базу данных и использовать ее для доступа и хранения данных csv. После этого вы должны создать код модели с помощью inspectdb:

python manage.py inspectdb TableName > output.py

Установите путь к месту, где вы хотите сгенерировать файл модели. Я не уверен, будет ли эта команда перезаписывать или добавлять в текущий файл, поэтому вы можете попробовать добавить в текущий файл, если это не сработает, создайте временный файл, запишите в него вывод и добавьте его в нужный вам файл models.py: https://www.geeksforgeeks.org/python-append-content-of-one-text-file-to-another/

После всего процесса у вас будут сгенерированные, выполненные миграции и модель в models.py для использования при перезапуске сервера.

Вернуться на верх