Django Insert Data

In Django, inserting data into the database involves creating an object (instance) of a model and saving it. This process writes the object’s data into the corresponding table in the database.

Create a Django Model Book


from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)  # Title of the book
    author = models.CharField(max_length=100)  # Author name
    published_year = models.IntegerField()     # Year the book was published

    def __str__(self):
        return self.title

How to Insert Data into the Database

Using Django Shell

1. Open the Django shell:


python manage.py shell

2. Import the model:


from myapp.models import Book  # Replace 'myapp' with your app name

3. Create and save a new book instance:


# Create a book instance
new_book = Book(
    title="A Suitable Boy",
    author="Vikram Seth",
    published_year=1993
)

# Save the book to the database
new_book.save()

Now, the new book is saved in the database.

Using create() Method

Instead of creating and saving separately, you can use the create() method, which does both in one step:


Book.objects.create(
    title="The White Tiger",
    author="Aravind Adiga",
    published_year=2008
)

Insert Multiple Data

1. Using bulk_create() for Multiple Inserts

The bulk_create() method is used to insert multiple records at once. It’s faster than saving each instance individually because it sends a single query to the database.

Example:


from myapp.models import Book  # Replace 'myapp' with your app name

# Create a list of Book instances (do not save yet)
books = [
    Book(title="The Inheritance of Loss", author="Kiran Desai", published_year=2007),
    Book(title="The Guide", author="R. K. Narayan", published_year=1958),
    Book(title="The Palace of Illusions", author="Chitra Banerjee Divakaruni", published_year=2008),
]

# Use bulk_create to insert all the books at once
Book.objects.bulk_create(books)

Explanation:

A list of Book instances is created but not saved.

bulk_create() inserts all the instances in one database query, which is efficient.

2. Using Loops to Insert Multiple Records

If you need custom logic for each instance, you can use a loop with .save(). However, this sends one query per record, which is slower for large datasets.

Example:


from myapp.models import Book  # Replace 'myapp' with your app name

# List of data to insert
book_data = [
    {"title": "The Inheritance of Loss", "author": "Kiran Desai", "published_year": 2007},
    {"title": "The Guide", "author": "R. K. Narayan", "published_year": 1958},
    {"title": "The Palace of Illusions", "author": "Chitra Banerjee Divakaruni", "published_year": 2008},
]

# Loop through the data and save each record
for data in book_data:
    Book.objects.create(**data)

Explanation:

The create() method saves each record one at a time.

**data unpacks the dictionary keys into model fields.