Create If Doesn't Exist

Create If Doesn't Exist

I have a Django application that reads data from a web API and puts it in a database.
Is there a way to create a new object from a mode but prevent the duplicate exception if the object already exists?

In other words, is there a way to save an object, but to just do nothing if it already exists?

4 Answers

In Django 1.7, you can also do:

Model.objects.update_or_create()

1

It can be achieved using Model.objects.get_or_create()

Example

obj, created = Person.objects.get_or_create(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

Any keyword arguments(here first_name and last_name) passed to get_or_create() — except an optional one called defaults — will be used to query in database(find the object) in database.

It returns a tuple, if an object is found, get_or_create() returns a tuple of that object and False.

Note: Same thing can also be achieved using try except statements
Example:

try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
except Person.DoesNotExist:
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
    obj.save()

Looks like in newer versions of Django the save() function does an UPDATE or INSERT by default. See here.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Robert Thorne
Author

Robert Thorne

Robert Thorne covers electric vehicle innovations, autonomous driving systems, global mobility trends, and automotive engineering developments.