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

标签 python mysql django unit-testing testing

我正在为 Django 应用程序编写单元测试。我正在测试的代码在从 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

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

我在 python 2.7 上运行 django 1.5.10。

我在这里做错了什么?

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

最佳答案

好吧,我正在使用 sqlite 作为测试数据库。而且 sqlite 似乎没有 bool 文字。这就是为什么测试最初失败,但当 TRUE 替换为 1 时可以正常运行的原因。把它留在这里,以防有人遇到类似情况。

关于python - 原始 mysql 查询在测试时失败,但使用 django 可以正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575661/

相关文章:

python - Spark 中的 Word2Vec 是否在整个文本列上进行训练

python - 记录器找不到文件

php - 仅当值更改时才使用 PHP 更新 MySQL 数据库

python - AttributeError : 'unicode' object has no attribute 'fromstring' . 如何解决这个问题?

python - 获取具有重复值的行的第一个版本与一列

mysql - php mysql通用更新查询不更新数据库中的数据

java - 错误 java.sql.SQLException : Column 'id' not found

python - 为什么 Django 返回陈旧的缓存数据?

python - Django - 如何有效地将列表添加到多对多模型字段

python - 模板中的 Django "Display once"