从django中的csv导入数据 - Has_header属性不会忽略第一行

时间:2016-05-12 09:49:57

标签: django csv

我必须创建一个应用程序,将数据从csv导入到已存在的django模型中。我使用了django-adaptator工具,可以轻松完成。

例如,我有一个Sates(=“Pays”)模型,其中包含3个字段:名称,代码和国籍。

我的csv:

nom;abrev;nationalite
AFGHANISTAN;AF;Afghane
AFRIQUE DU SUD;ZA;Sud-africaine

这是我的代码

已存在的Models.py:

class Pays(models.Model):
pays = models.CharField(max_length=150)
codeiso3166alpha2 = models.CharField(max_length=2)
nationalite = models.CharField(max_length=50, null=True, blank=True)
maj = models.DateTimeField(auto_now=True)
class Meta:
    db_table = u'Pays'
def __unicode__(self):
    return self.pays

我的应用程序中的Models.py:

# coding: utf-8
from django.db import models
from polyc2n.models import Pays #the model that already exists
from adaptor.model import CsvDbModel

class MyCSVDbModel(CsvDbModel):

    class Meta:
        exclude = ['maj']
        dbModel = Pays
        delimiter = ";"
        has_header = True
        update = {'keys': ['codeiso3166alpha2']}

我的views.py:

# coding: utf-8
from django.shortcuts import render
from remplirPays.models import MyCSVDbModel
from django.http import HttpResponse

path = "pays.csv"

def DataPays(request):
    MyCSVDbModel.import_data(data = open(path))
    return HttpResponse("import is ok")

这是我的问题:当我执行导入时,即使我将“has_header”属性设置为True,也不会忽略第一行。你们知道为什么或者你知道如何解决我的问题吗?

感谢您阅读

1 个答案:

答案 0 :(得分:0)

为什么不最好尝试使用datareader和load.py文件,在这里我给你一个我使用的示例代码:

import csv,sys,os
import django

pathproject = "/home/yourfolder"
base_csv_filepath = "/home/yourfolder/yourcsvfile"
sys.path.append(pathproject)
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.local'
django.setup()

from yourapp.models import yourmodel

def load_your_data():
    print ("Entering...")
    csv_file = base_csv_filepath + "/yourcsvfile.csv"
    dataReader = csv.reader(open(csv_file, encoding='utf-8'),delimiter=',',quotechar='"')
    for row in dataReader:
        if row[0] != 'ID':
            yourmodel.objects.create(
                field1=row[0],
                field2=row[1]
            )
    print ("Imported correctly")


if __name__ == "__main__":
    load_your_data()

编辑:'ID'将是标题列文字,假设它是2行数据,您当然可以修改它,因为您希望覆盖更大的参数。