Этот вопрос похож на: Заполнение базы данных SQLite3 из файла .txt с помощью Python , но моя цель другая, поскольку я хочу заполнить базу данных из фрейма данных pandas, а не из текстового файла.
Моя цель - взять дамп XML (дамп данных StackExchange) и заполнить мою базу данных, основываясь на некоторых данных, содержащихся в ней. Я начал с использования xml.etree.ElementTree для анализа файла, а затем вытащил данные в кадр данных pandas для легкой индексации.
Мне нужно пройтись по фрейму данных, чтобы проверить условия для вопросов, внести некоторые изменения в поля, а затем заполнить поля в моей модели вопросов на основе этого. Вот моя модель вопроса:
class Question(models.Model, HitCountMixin):
"""Model class to contain every question in the forum"""
title = models.CharField(max_length=200, blank=False)
description = MarkdownxField()
pub_date = models.DateTimeField('date published', auto_now_add=True)
tags = TaggableManager()
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
closed = models.BooleanField(default=False)
positive_votes = models.IntegerField(default=0)
negative_votes = models.IntegerField(default=0)
total_points = models.IntegerField(default=0)
Я знаю, что могу запустить оболочку django следующим образом:
python manage.py shell
И что мне нужно сделать что-то, чтобы создать объекты:
from your_app.models import Question
# If you're using different field names, change this list accordingly.
# The order must also match the column order in the CSV file.
fields = [<question fields>]
data = <stuff from PD dataframe>
Question.objects.create(**dict(zip(fields, data)))
Но проблема в том, что я не знаю, как затем передать мои измененные данные из фрейма данных в приведенный выше скрипт. Я смотрел на использование subprocess.call, но мне интересно, есть ли способ сделать это напрямую без запуска оболочки. Может быть, какой-нибудь прямой вызов для заполнения БД из моего основного скрипта?