Python MySQL: limpie la tabla de claves externas múltiples
-
06-07-2019 - |
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.
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)