I ont le modèle suivant qui représente les adresses IP:Django + MySQL IntegrityError sur save()
class Ip(models.Model):
ip = models.CharField(max_length=20, primary_key=True)
...
Procédé envoie des paramètres IP à une fonction qui doit UPSERT lignes IP dans la base de données.
Cela fonctionne bien, jusqu'à ce que le processus commence à « bombardent » avec les adresses IP, qui parfois (environ 1 à toutes les quelques demandes de centaines) jette l'erreur suivante:
IntegrityError: (1062, "Duplicate entry '1.2.3.4' for key 'PRIMARY'")
Pourquoi cela?
Pourquoi Django essaie-t-il d'INSÉRER lorsque cette ligne existe déjà (elle est définie comme clé primaire)?
Comment puis-je résoudre ce problème sans sélectionner manuellement et en décidant INSERT ou UPDATE?
Nous utilisons Django 1.5.1
EDIT:
Voilà comment nous le upsert:
obj = Ip(ip='1.2.3.4', ...)
obj.save()
Selon les docs (et notre expérience), cela devrait effectuer une opération de UPSERT, sur la base la clé primaire ip
dont a toujours la valeur.
Comment sauvegardez-vous votre modèle? – knbk
s'il vous plaît coller un petit code sur la façon dont vous le faites, nous pouvons proposer une solution basée sur cela. Accroding à moi que vous avez spécifié l'IP comme clé primaire ainsi quand la même IP vient donne l'erreur d'intégrité –
Édité avec le code qui enregistre le modèle – user1102018