Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pymysql-清除表以进行测试_Python_Mysql_Testing_Pymysql - Fatal编程技术网

Python pymysql-清除表以进行测试

Python pymysql-清除表以进行测试,python,mysql,testing,pymysql,Python,Mysql,Testing,Pymysql,我希望为我的应用程序编写测试。我想为我的所有测试使用一个干净的数据库。由于各种原因,我无法创建单独的测试数据库 我目前所做的是运行事务中的所有内容,并且从不提交给db。但是有些测试是从数据库读取的,所以我想在事务开始时删除所有行,然后从那里开始 我遇到的问题是外键约束。目前,我只是浏览每一张桌子 cursor.execute("DELETE FROM %s" % tablename) 这让我 IntegrityError: (1451, u'Cannot delete or update a

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

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

我遇到的问题是外键约束。目前,我只是浏览每一张桌子

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\u NAME
drop database\u NAME
。这样,您总是从一个干净的数据库状态开始,不必担心外键或其他约束

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


作为一个真实的例子,这就是Django在运行测试时所做的。Django ORM从您的模型中重新创建表架构,然后应用or/和and迁移。

有没有一种简单的方法将架构从一个数据库复制到新创建的测试数据库中?@Shatnerz您是否使用ORM,例如sqlalchemy?当出于测试原因复制/重新创建项目数据库架构时,这通常会使事情变得更容易。@Shatnerz一个天真的想法是将工作架构导出到sql文件,然后导入到测试数据库架构。不幸的是,我们使用的是一个非常原始的内部“ORM”,这是缺少的。在过去,我使用了sqlalchemy,这让生活变得非常简单。