2014-10-26 57 views
0

我正在为django应用程序编写unittests。我正在测试的代码在从web触发时正常工作,但是在测试时,代码在同一台计算机上以DatabaseError: no such column: TRUE失败。原始mysql查询测试失败,但与Django正确运行

以下是代码,失败

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 

这个工作正常或者在mysql shell中执行,或者在用户从web触发相关代码时由django自己执行。但是在使用django测试框架进行测试时失败。

我在python 2.7上运行django 1.5.10。

我在这里做错了什么?

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

回答

1

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