【发布时间】:2010-12-21 04:43:02
【问题描述】:
我正在使用 Python MySQL,需要清理数据库中包含 13328 行的表。
我不能做一个简单的删除表,因为这个表是孩子,也是其他孩子外键的父亲。如果我尝试 drop table,系统会禁止我。该表使用 ON UPDATE CASCADE、ON DELETE CASCADE 和 InnoDB 定义;该表的主键索引定义为
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。
有什么建议吗?
高度赞赏和欢迎所有 cmets 和建议。
【问题讨论】:
-
社区 wiki 模式意味着您提出问题或回答此问题的人不会获得声誉
标签: python mysql auto-increment foreign-keys