我有这个代码:
try:
parent_comment = models.Comment.all_objects.get(id=parent_comment_id)
except models.Comment.DoesNotExist:
parent_comment = None
if parent_comment is not None and parent_comment_id is None:
raise Exception("WTF django/mysql")
...有时,异常会以某种方式引发。这怎么可能发生?
偶尔,一天几次,它返回看似随机的 Comment 实例。通常它会按预期运行并返回 None。
这是 Comment 表的 id 字段:id int(11) NOT NULL AUTO_INCREMENT
所以它不是可以为空的。这是一个 InnoDB 表。
至于 Comment.all_objects,这是它的定义:all_objects = Manager()
它是该类的第一行。
我们在 Django 1.2.7 上。
更新 向异常添加了日志记录,以获取引发异常时生成的 SQL。这里是:
SELECT `canvas_comment`.`id`, `canvas_comment`.`visibility`, `canvas_comment`.`parent_content_id`, `canvas_comment`.`parent_comment_id`, `canvas_comment`.`timestamp`, `canvas_comment`.`reply_content_id`, `canvas_comment`.`reply_text`, `canvas_comment`.`replied_comment_id`, `canvas_comment`.`category_id`, `canvas_comment`.`author_id`, `canvas_comment`.`title`, `canvas_comment`.`ip`, `canvas_comment`.`anonymous`, `canvas_comment`.`score`, `canvas_comment`.`judged`, `canvas_comment`.`ot_hidden` FROM `canvas_comment` WHERE `canvas_comment`.`id` IS NULL