原始mysql查询在测试时失败,但使用django正确运行

时间:2014-10-26 17:12:21

标签: python mysql django unit-testing testing

我正在为django应用程序编写单元测试。代码I测试在从Web触发时正常工作,但在测试时,代码在同一台机器上以DatabaseError: no such column: TRUE失败。

以下是失败的代码

sql = """SELECT `ad`.`question_id`
            FROM `ad`
            INNER JOIN `question` ON (`ad`.`question_id` = `question`.`id`)
            INNER JOIN `answer` ON (`question`.`id` = `answer`.`question_id`)
            WHERE `ad`.`is_active` = TRUE
                AND `answer`.`language_id` = %(language_id)s
                AND `ad`.`order` = %(order)s
            """ % {
                "language_id": user.language.id,
                "order": user.state.total
            }


cursor = connection.cursor()
if cursor.execute(sql):
    ...

上面生成的sql如下。

SELECT `ad`.`question_id`
            FROM `ad`
            INNER JOIN `question` ON (`ad`.`question_id` = `question`.`id`)
            INNER JOIN `answer` ON (`question`.`id` = `answer`.`question_id`)
            WHERE `ad`.`is_active` = TRUE
                AND `answer`.`language_id` = 1
                AND `ad`.`order` = 672

当用户从Web触发相关代码时,这可以在mysql shell中执行,也可以由django本身执行。但是在使用django测试框架测试时失败了。

我在python 2.7上运行django 1.5.10。

我在这里做错了什么?

编辑:如果TRUE替换为1,它也适用于测试。

1 个答案:

答案 0 :(得分:1)

好吧,我使用的是sqlite作为测试数据库。似乎sqlite没有布尔文字。这就是为什么测试最初失败的原因,但是当TRUE替换为1时运行正常。将此保留在此处,以防任何人遇到类似情况。