pymysql - 清除表格进行测试

时间:2016-12-23 15:42:11

标签: python mysql testing pymysql

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

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

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

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`))')

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

1 个答案:

答案 0 :(得分:2)

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

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

作为一个真实世界的例子,这就是Django在你运行测试时所做的事情。表模式由模型中的Django ORM重新创建,然后应用fixtures或/和schemadata迁移。