Question

Je travaille avec Python MySQL et j'ai besoin de nettoyer une table de ma base de données comportant 13328 lignes.

Je ne peux pas créer de table de dépôt simple, car cette table est un enfant et également le père d'autres clés étrangères liées à l'enfant. Si j'essaye de déposer une table, le système m'a interdit. La table est définie avec ON UPDATE CASCADE, ON DELETE CASCADE et InnoDB; L'index primary_key de cette table est défini comme

productID INT(6) NOT NULL AUTO_INCREMENT ...
PRIMARY KEY (productID,productNO)

Par conséquent, je dois juste nettoyer; cela restaurera automatiquement l'index de clé primaire de la table sur 1 pour la prochaine entrée. Droit?

Cette procédure a bien fonctionné pour une autre table qui était une table père, mais pas aussi une table père et enfant. Mais, pour cette table, qui est l’enfant et le père d’autres tables, je me suis retrouvée coincée dessus.

Voici le code - productID est la clé d'index primaire de cette table:

def clean_tableProduct(self):
    getMaxID_MySQLQuery = """SELECT MAX(productID)
    FROM product;"""

    cleanTabeMySQLQuery="""DELETE FROM product WHERE productID <=%s;"""              

    self.cursorMySQL.execute(getMaxID_MySQLQuery)        

    for row in self.cursorMySQL:       
        self.cursorMySQL.execute(cleanTabeMySQLQuery,(row[0],)) 

Si je consulte les résultats du traitement sur la console MySQL, cela me donne:

mysql> SELECT MIN(productID)
    FROM product;
4615748

mysql> SELECT MAX(productID)
    FROM product;
4629075

Si je lance la même commande sur la console pour nettoyer la table, cela fonctionne:

mysql> DELETE FROM product WHERE productID <='4629075';
Query OK, 13328 rows affected (0.64 sec)

et me montre ce à quoi je m'attendrais normalement.

Cependant, si je passe à la fonction Python après avoir nettoyé la table sur la console et que je lance à nouveau le programme, et que je nettoie la table pour redémarrer le traitement, il ne redémarre pas l'index de la table avec MIN: 1, mais plutôt 4629076.

Des suggestions?

Tous les commentaires et suggestions sont hautement appréciés et les bienvenus.

Était-ce utile?

La solution

Pour supprimer tous les enregistrements de la table:

truncate table product

Pour réinitialiser l'ID suivant sur 1:

ALTER TABLE product AUTO_INCREMENT = 1

ou

SET insert_id;
INSERT INTO product ...;

(Je n'ai pas testé cela. Mais je devrais travailler)

Autres conseils

Si vous nettoyez une table avec tronqué:

TRUNCATE TABLE product

Cet effet secondaire réinitialisera le compteur d’incrémentation automatique. Mais vous pouvez également le réinitialiser manuellement:

ALTER TABLE product AUTO_INCREMENT = 1

Merci beaucoup pour toutes vos contributions et vos retours rapides. Ça a fait l'affaire!

Voici à quoi cela ressemble maintenant:

def clean_tableProduct(self):
    cleanTabeMySQLQuery = """TRUNCATE TABLE product;"""
    self.cursorMySQL.execute(cleanTabeMySQLQuery)

    setIndexMySQLQuery = """ALTER TABLE product AUTO_INCREMENT = 1;"""
    self.cursorMySQL.execute(setIndexMySQLQuery)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top