Pregunta

Estoy trabajando con Python MySQL y necesito limpiar una tabla en mi base de datos que tiene 13328 filas.

No puedo hacer una tabla desplegable simple, porque esta tabla es secundaria y también padre de otras claves externas vinculadas a ella. Si intento soltar tabla, el sistema me lo prohibió. La tabla se define con ON UPDATE CASCADE, ON DELETE CASCADE e InnoDB; El índice primary_key de esa tabla se define como

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

Por lo tanto, solo tengo que limpiar; esto restaurará automáticamente el índice de la clave primaria de la tabla a 1 para la siguiente entrada. ¿Cierto?

Este procedimiento funcionó bien para otra tabla que era una tabla padre, pero no también una tabla padre e hijo. Pero, para esta tabla, que es hija y padre de otras tablas, me quedé atrapado en ella.

Aquí está el código: productID es mi clave de índice principal para esta tabla:

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 voy a la consola de MySQL para verificar los resultados del procesamiento, me aparece:

mysql> SELECT MIN(productID)
    FROM product;
4615748

mysql> SELECT MAX(productID)
    FROM product;
4629075

Si ejecuto el mismo comando en la consola para limpiar la tabla, funciona:

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

y me muestra lo que normalmente esperaría.

Sin embargo, si voy a la función Python después de haber limpiado la tabla en la consola, y ejecuto el programa nuevamente, y limpio la tabla para reiniciar el procesamiento, reinicia el índice de la tabla no con MIN: 1, sino 4629076.

¿Alguna sugerencia?

Todos los comentarios y sugerencias son muy apreciados y bienvenidos.

¿Fue útil?

Solución

Para eliminar todos los registros de la tabla:

truncate table product

Para restablecer la siguiente ID a 1:

ALTER TABLE product AUTO_INCREMENT = 1

o

SET insert_id;
INSERT INTO product ...;

(No he probado esto. Pero debería funcionar)

Otros consejos

Si limpia una tabla con truncamiento:

TRUNCATE TABLE product

Como efecto secundario, eso restablecerá el contador de incremento automático. Pero también puede restablecerlo manualmente:

ALTER TABLE product AUTO_INCREMENT = 1

Muchas gracias por todos los comentarios y comentarios rápidos. ¡Hizo el truco!

Así es como se ve ahora:

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

    setIndexMySQLQuery = """ALTER TABLE product AUTO_INCREMENT = 1;"""
    self.cursorMySQL.execute(setIndexMySQLQuery)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top