Populate a Django Database from a CSV File

Dec. 25, 2017, 12:16 p.m.

Django documentation suggests pre-populating a database using fixtures (which support data importation from xml, json, and yaml files) but I wanted to populate the database directly from a CSV file. I used the RunScript command from django-extensions, which allows you to run a set of commands in the shell accessed by python manage.py shell. Here's how I did it:

import sys, os, django, csv
csv_filepath_name = "/Users/norafergany/djangoproject/file.csv"
djangoproj_home = "/Users/norafergany/djangoproject"

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoproject.settings")
from app.models import Model

def run():
    with open(csv_filepath_name) as f:
        reader = csv.reader(f, delimiter=',')
        next(reader, None)
        for row in reader:
            if row:
                _, created = Model.objects.get_or_create(

The script iterates through the file and treats each row as a unique model object, assigning each cell's value to the proper model attribute. To run the script, go into your Django project home in the terminal and run the following command:

python3 manage.py runscript script_name

If the script successfully executes, the model objects will print to the terminal.