Os.system和mysql还原在python unittest中不起作用

2024-09-29 06:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个在数据库“mydatabase”中保存条目的程序进行单元测试。因此,我需要在测试每个功能后恢复db,以便其他测试不会受到影响。我尝试使用os.system()编写一个mysql命令来进行恢复。以下是该计划的相关部分:

class testSql(unittest.TestCase):

    def setUp(self,
        dbName = "mydatabase",
        existingUser = "John",
        nonExistingUser = "thisnamedoesnotexist",
    ):
        os.system('mysql -u root -ppassword mydatabase < "mypath/schema.sql"')
        self.dbName = dbName
        self.existingUser = existingUser
        self.nonExistingUser = nonExistingUser

    def test_signUp(self):
        self.assertFalse(sql.userExists(self.nonExistingUser))
        sql.signUp(self.nonExistingUser,"password")
        self.assertTrue(sql.userExists(self.nonExistingUser))

然而,当我运行程序时,我没有显示测试结果,而是只看到mysql命令的结果,终端冻结,因此我无法输入任何内容,只能关闭它:Result from terminal

我尝试的是:用操作系统创建一个函数并调用它;导入具有该功能的文件;使用exec()函数执行包含语句的文件;导入文件以执行语句

显然,os.system(“mysql-u root-ppassword”)工作得很好,但restore和dump命令不行。有没有人知道如何解决这个问题,或者以其他方式实现我的目标


Tags: 文件命令self程序功能sqlosmy
1条回答
网友
1楼 · 发布于 2024-09-29 06:28:59

好的,我发现问题是当用户已经存在时,我没有提交数据库,这导致连接没有关闭,而当我尝试创建另一个连接时(即使用mysql命令),后者永远等待第一个数据库结束

要防止这种情况:提交或关闭与数据库的连接,或在创建与数据库的另一个连接之前关闭游标(或使用同一游标进行恢复)

相关问题 更多 >