Maison > base de données > tutoriel mysql > Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant unique, court et entier ?

Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant unique, court et entier ?

DDD
Libérer: 2024-12-03 16:51:10
original
869 Les gens l'ont consulté

How Can I Replace Django's Auto-Incrementing Primary Key with a Unique, Short, Integer ID?

Remplacement de la clé primaire de Django par un entier unique

Aperçu du problème

Dans Django, la clé primaire par défaut est un entier positif auto-incrémenté utilisé partout la demande. Cependant, cela expose publiquement le nombre d’entités dans la base de données, ce qui nécessite une alternative. Cet article répond à un ensemble spécifique d'exigences pour une clé primaire obscurcie :

  • Type de données entier
  • Évitement du hachage/déhachage pour chaque lecture/écriture/comparaison
  • Hachage unique lors de l'insertion de l'enregistrement
  • Valeur hachée unique dans un domaine spécifique table
  • Longueur minimale des URL courtes

Solution proposée

La méthode Instagram, inspirée de cet article, répond à ces exigences. L'ID généré se compose de :

  • 41 bits pour un composant temporel
  • 23 bits choisis au hasard

Implémentation du code

Identifiant Génération :

START_TIME = <unix timestamp>

def make_id():
    t = int(time.time()*1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u
    return id

def reverse_id(id):
    t = id >> 23
    return t + START_TIME
Copier après la connexion

Modèle :

class MyClass(models.Model):
    id = models.BigIntegerField(default=fields.make_id, primary_key=True)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal