So vorausgesetzt, Ihr models.py
etwas wie folgt aussieht:
class Representative(models.Model):
parliament = models.CharField(max_length=128)
name = models.CharField(max_length=128)
country = models.CharField(max_length=128)
party_group = models.CharField(max_length=128)
national_party = models.CharField(max_length=128)
position = models.CharField(max_length=128)
Sie können dann python manage.py shell
laufen und führen Sie die folgenden Schritte aus:
import csv
from your_app.models import Representative
# If you're using different field names, change this list accordingly.
# The order must also match the column order in the CSV file.
fields = ['parliament', 'name', 'country', 'party_group', 'national_party', 'position']
for row in csv.reader(open('your_file.csv')):
Representative.objects.create(**dict(zip(fields, row)))
Und du bist fertig.
Addendum (edit)
Per Thomas Wunsch, hier ist eine Erklärung, was **dict(zip(fields,row))
tut:
Also zunächst fields
eine Liste der Feldnamen enthält, die wir definiert, und row
enthält eine Liste von Werte, die die aktuelle Zeile in der CSV-Datei darstellen.
fields = ['parliament', 'name', 'country', ...]
row = ['7', 'Marta Andreasen', 'United Kingdom', ...]
zip()
Was tut, ist es zwei Listen in eine Liste von Paaren von Elementen aus beiden Listen kombiniert (wie ein Reißverschluß); d.h. zip(['a','b,'c'], ['A','B','C'])
wird [('a','A'), ('b','B'), ('c','C')]
zurückgeben. Also in unserem Fall:
>>> zip(fields, row)
[('parliament', '7'), ('name', 'Marta Andreasen'), ('country', 'United Kingdom'), ...]
Die dict()
Funktion wandelt einfach die Liste von Paaren in einem Wörterbuch.
>>> dict(zip(fields, row))
{'parliament': '7', 'name': 'Marta Andreasen', 'country': 'United Kingdom', ...}
Die **
ist ein Weg, ein Wörterbuch in ein Schlüsselwort-Argument-Liste für eine Funktion der Umwandlung. So ist function(**{'key': 'value'})
das Äquivalent von function(key='value')
. So in aus Beispiel create(**dict(zip(field, row)))
Aufruf ist das Äquivalent von:
create(parliament='7', name='Marta Andreasen', country='United Kingdom', ...)
Hoffnung diese Dinge aufklärt.
Wenn Sie diese in Django laden, schauen Sie sich hier unbedingt die Lösung von Aram an. Es nutzt die django ORM-Bits für Sie, so dass Sie sich nicht direkt mit dem Schema herumschlagen müssen. Keine große Sache, wenn Sie mit SQL-Schema vertraut sind, aber ich fand, dass es die Dinge viel einfacher gemacht hat. – heckj
+1; das ist viel einfacher! – bernie
Danke für die Antwort Aram.Ich lerne immer noch Python, also könntest du erklären, was der (** dict (zip (...)) Teil der letzten Zeile tut? –