Import Data from CSV Sheets into Databases using Django

Django, a powerful Python web framework, offers an efficient way to import data from CSV (Comma-Separated Values) sheets into your database. Whether you’re migrating existing data or regularly updating your application’s database, this guide will walk you through the process step by step.

Prerequisites

Before we dive into the implementation, make sure you have the following prerequisites:

  1. Python (3.6 or higher)
  2. Django
  3. A Django project with a database configured

Step 1: Create a Model

First, define a Django model that matchis the structure of your CSV data. Let’s say you want to import data about books into your database. Your model might look like this:

# models.py

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_year = models.IntegerField()
    isbn = models.CharField(max_length=13)

Step 2: Create a Form

Create a Django form to handle CSV file uploads. This form will allow users to select and submit the CSV file they want to import. Create a new file forms.py if you haven’t already:

# forms.py

from django import forms

class CSVImportForm(forms.Form):
    csv_file = forms.FileField()

Step 3: Create a View

Now, create a view that processes the uploaded CSV file and inserts its data into the database. This view should handle the form submission and data insertion:

# views.py

from django.shortcuts import render, redirect
from .forms import CSVImportForm
from .models import Book
import csv

def import_csv(request):
    if request.method == 'POST':
        form = CSVImportForm(request.POST, request.FILES)
        if form.is_valid():
            csv_file = request.FILES['csv_file'].read().decode('utf-8').splitlines()
            csv_reader = csv.DictReader(csv_file)

            for row in csv_reader:
                Book.objects.create(
                    title=row['title'],
                    author=row['author'],
                    publication_year=row['publication_year'],
                    isbn=row['isbn']
                )

            return redirect('success_page')  # Redirect to a success page
    else:
        form = CSVImportForm()

    return render(request, 'import.html', {'form': form})

Step 4: Create Templates

Create an HTML template for the form (e.g., import.html) and a success page template (e.g., success.html). In import.html, render the form for uploading the CSV file:

<!-- templates/import.html -->

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Import CSV</button>
</form>

Step 5: Define URLs

Define URL patterns for your views in your app’s urls.py:

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('import-csv/', views.import_csv, name='import_csv'),
    path('success/', views.success_page, name='success_page'),  # Create this view if needed
]

Step 6: Run Your Django Development Server

Ensure your Django development server is running:

python manage.py runserver

Step 7: Access the CSV Import Page

Now, you can access the CSV import page by visiting:

http://localhost:8000/import-csv/

Upload your CSV file through the form, and the data will be imported into your database.

Conclusion

Importing data from CSV sheets into a Django database is a valuable feature for managing your application’s data. By following these steps, you can easyly implement this functionality and provide your users with a convenient way to import data seamlessly into your Django application.

Find this tutorial on Github.

Blogs You Might Like to Read!