101 votes

comment importer des données csv dans des modèles django

J'ai quelques données CSV et je veux importer dans les modèles django en utilisant l'exemple des données CSV :

1;"02-01-101101";"Worm Gear HRF 50";"Ratio 1 : 10";"input shaft, output shaft, direction A, color dark green";
2;"02-01-101102";"Worm Gear HRF 50";"Ratio 1 : 20";"input shaft, output shaft, direction A, color dark green";
3;"02-01-101103";"Worm Gear HRF 50";"Ratio 1 : 30";"input shaft, output shaft, direction A, color dark green";
4;"02-01-101104";"Worm Gear HRF 50";"Ratio 1 : 40";"input shaft, output shaft, direction A, color dark green";
5;"02-01-101105";"Worm Gear HRF 50";"Ratio 1 : 50";"input shaft, output shaft, direction A, color dark green";

J'ai des modèles de django nommés Produit. Dans Produit, il y a des champs comme name, description et price. Je veux quelque chose comme ça :

product=Product()
product.name = "Worm Gear HRF 70(02-01-101116)"
product.description = "input shaft, output shaft, direction A, color dark green"
product.price = 100

117voto

Friendm1 Points 101

Vous souhaitez utiliser le module csv qui fait partie du langage python et vous devez utiliser la méthode get_or_create de Django

 with open(path) as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = Teacher.objects.get_or_create(
                first_name=row[0],
                last_name=row[1],
                middle_name=row[2],
                )
            # creates a tuple of the new object or
            # current object and a boolean of if it was created

Dans mon exemple, le professeur modèle a trois attributs first_name, last_name et middle_name.

Documentation Django de la méthode get_or_create

10voto

mmrs151 Points 1041

Vous pouvez également utiliser, django-adaptateurs

>>> from adaptor.model import CsvModel
>>> class MyCSvModel(CsvModel):
...     name = CharField()
...     age = IntegerField()
...     length = FloatField()
...
...     class Meta:
...         delimiter = ";"

Vous déclarez un modèle MyCsvModel qui correspondra à un fichier CSV comme ceci :

Anthony ;27 ;1,75

Pour importer le fichier ou tout objet itérable, procédez comme suit :

>>> my_csv_list = MyCsvModel.import_data(data = open("my_csv_file_name.csv"))
>>> first_line = my_csv_list[0]
>>> first_line.age
    27

Sans déclaration explicite, les données et les colonnes sont appariées dans le même ordre :

Anthony --> Column 0 --> Field 0 --> name
27      --> Column 1 --> Field 1 --> age
1.75    --> Column 2 --> Field 2 --> length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X