这个问题类似于:Populating a SQLite3 database from a .txt file with Python,但是我的目标不同,因为我想从熊猫数据框而不是文本文件填充数据库。
我的目标是进行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 shell:
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的方法,但我想知道是否存在一种无需启动外壳程序即可直接执行此操作的方法。也许直接调用从我的主脚本中填充数据库?