需要将CSV文件中的数据导入Django应用程序。这是模型的样子:
class MDfile(models.Model):
file_name = models.CharField(max_length=50, editable=False)
line = models.IntegerField()
mkt_type = models.CharField(max_length=7, editable=False)
# ...... etc.
yearly_lo_price1 = models.CharField(max_length=9, editable=False)
在处理程序中调用的方法很简单:
def impMDfile(self, fileType, fullpath, filename):
try:
lines=1
obj = MDfile()
fromFile = open(fullpath)
for eachLine in fromFile:
fieldsInLine = eachLine.split(",")
print fieldsInLine
obj.file_name = filename
obj.line = lines
obj.mkt_type = fieldsInLine[0].strip()
# ...... etc.
obj.yearly_lo_price1 = fieldsInLine[12].strip()
obj.save()
lines+=1
except BaseException as e:
logging.info('\terror importing %s line %d : %s' % (fullpath, lines, e.__str__()))
else:
logging.info("\timported %s, %d lines" % (fullpath, lines))
问题:只有一些随机记录被插入到数据库中,而它在运行时将所有行打印到终端,并且行计数是正确的。这些文件大约有1.5 - 2.5k行。也用psql检查了表。
在Virtualenv中使用Django 1.7.1; PostgreSQL数据库; Ubuntu 12.04。我对Python不太好;刚刚开始使用Django。任何帮助/指示赞赏,谢谢!
答案 0 :(得分:0)
您在for循环之外创建obj = MDfile()
,然后在循环内多次保存。 只有第一个保存实际上会创建一个新的数据库记录。之后,每次保存时,记录都会更新。
将该行移动到for循环中是一个快速解决方法。
如果执行速度太慢,更好的方法是根本不调用.save()
,而是构建未保存的MDfile
实例列表,然后调用MDfile.objects.bulk_create(instances)
创建它们所有这一切都在一个大问题中。