pymysql - 清除 table 用于测试

pymysql - Clear a table for testing

我正在为我的应用程序编写测试。我想为我的所有测试使用一个干净的数据库。由于各种原因,我无法创建单独的测试数据库。

我目前所做的是运行 事务中的所有内容,从不提交给数据库。但是有些测试是从数据库中读取的,所以我想删除事务开始时的所有行并从那里开始。

我运行遇到的问题是外键约束。目前我只是浏览每个 table 并做

cursor.execute("DELETE FROM %s" % tablename)

这给了我

IntegrityError: (1451, u'Cannot delete or update a parent row: a
foreign key constraint fails (`testing`.`app_adjust_reason`,
CONSTRAINT `app_adjust_reason_ibfk_2` FOREIGN KEY (`adjust_reason_id`)
REFERENCES `adjust_reason` (`id`))')

编辑:我想要一些可以应用于任何数据库的通用的东西。否则我会特别放弃约束

一个更通用的方法是在测试前从头开始创建一个数据库 运行 然后删除它,使用 CREATE DATABASE_NAMEDROP DATABASE_NAME。这样,您总是从一个干净的数据库状态开始,而不必担心外键或其他约束。

请注意,您还需要在创建数据库后创建 table 模式和(可能是测试数据)。

作为真实世界的示例,这就是 Django 在您 运行 测试时所做的。 table 模式由 Django ORM 根据您的模型重新创建,然后应用 fixtures or/and the schema and data 迁移。