Python MySQL:清理多个外键表
-
06-07-2019 - |
题
我正在使用Python MySQL,需要清理我的数据库中有13328行的表。
我不能创建一个简单的drop table,因为这个表是child,也是链接在其上的其他子外键的父亲。如果我尝试丢桌,系统禁止我。该表使用ON UPDATE CASCADE,ON DELETE CASCADE和InnoDB定义;该表的primary_key索引定义为
productID INT(6) NOT NULL AUTO_INCREMENT ...
PRIMARY KEY (productID,productNO)
因此,我只需要清洁;这将自动将表主键索引恢复为1以进行下一次输入。正确?
此过程适用于另一个作为父表的表,但也不适用于父表和子表。但是,对于这张桌子,这是其他桌子的孩子和父亲,我被卡住了。
以下是代码 - productID是此表的主要索引键:
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],))
如果我去MySQL控制台检查处理结果,它会让我:
mysql> SELECT MIN(productID)
FROM product;
4615748
mysql> SELECT MAX(productID)
FROM product;
4629075
如果我在控制台上运行相同的命令来清理表,它可以工作:
mysql> DELETE FROM product WHERE productID <='4629075';
Query OK, 13328 rows affected (0.64 sec)
并向我展示了我通常所期望的。
但是,如果我在控制台上清理了表之后转到Python函数,并再次运行程序,并清理表重新启动处理,则重启表索引而不是MIN:1,而是4629076。 / p>
有什么建议吗?
所有意见和建议都受到高度赞赏和欢迎。
解决方案
删除表格中的所有记录:
truncate table product
将下一个ID重置为1:
ALTER TABLE product AUTO_INCREMENT = 1
或
SET insert_id;
INSERT INTO product ...;
(我没有测试过这个。但我应该工作)
其他提示
如果使用truncate清理表:
TRUNCATE TABLE product
作为副作用,将重置自动增量计数器。但您也可以手动重置它:
ALTER TABLE product AUTO_INCREMENT = 1
非常感谢所有输入和快速反馈。它成功了!
以下是现在的样子:
def clean_tableProduct(self):
cleanTabeMySQLQuery = """TRUNCATE TABLE product;"""
self.cursorMySQL.execute(cleanTabeMySQLQuery)
setIndexMySQLQuery = """ALTER TABLE product AUTO_INCREMENT = 1;"""
self.cursorMySQL.execute(setIndexMySQLQuery)
不隶属于 StackOverflow