Sunday, October 22, 2017

Re: Generating a unique 10 digit ID for each model instance

I thought python's uuid.uuid4 guaranteed a unique value. Am I missing something?

Mark

On Sun, Oct 22, 2017 at 3:58 PM, James Schneider <jrschneider83@gmail.com> wrote:


On Oct 22, 2017 12:29 PM, "Andréas Kühne" <andreas.kuhne@hypercode.se> wrote:
Hi,

I think you are correct with your pseudocode - you can do a Model.objects.filter(unique_code==random_code).count() - and then loop on that. It should work.

I wouldn't do this, it can lead to a race condition where you can possibly end up with duplicate ID's if two objects are being inserted at the same time.

Ensure that you have a unique index on the ID column, then just create your ID and try to insert it into the DB. Let the DB determine whether or not it is unique, it is much better at this than any Python code you can write. If it falils, catch the insertion error, change the ID, and try again. 

Even if you did do this, you should use .exists() rather than .count().

Either way, your code should be prepared to deal with the potential for duplicate ID's being inserted in to the database.

-James

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CA%2Be%2BciWUK0AUMJ5xO9AO26fjMcdNvrJ-0Bwpi0Rpj4S2fcS4CA%40mail.gmail.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAEqej2MZKeZQfmXig%2B1UHUpJaZtxhC%3DPiaEyij2rnFF1NRESZQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment