【问题标题】:Python MySQL: clean multiple foreign keys tablePython MySQL:清理多个外键表
【发布时间】: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


【解决方案1】:

要从表中删除所有记录:

truncate table product

将下一个 ID 重置为 1:

ALTER TABLE product AUTO_INCREMENT = 1

SET insert_id;
INSERT INTO product ...;

(我还没有测试过。但我应该工作)

【讨论】:

  • +1 虽然你不会得到任何代表,因为这是在维基模式:)
【解决方案2】:

如果您使用 truncate 清理表:

TRUNCATE TABLE product

作为副作用,这将重置自动增量计数器。但您也可以手动重置:

ALTER TABLE product AUTO_INCREMENT = 1

【讨论】:

    【解决方案3】:

    非常感谢所有输入和快速反馈。它成功了!

    这是现在的样子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      相关资源
      最近更新 更多