私はこのコードを持っています:
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")
...そして時々、何らかの形で例外が発生します。どうしてこれが起こるのでしょうか?
ときどき、1 日に数回、一見ランダムな Comment インスタンスが返されます。通常は期待どおりに動作し、None を返します。
これは Comment テーブルの id フィールドです:id int(11) NOT NULL AUTO_INCREMENT
したがって、null 可能というわけではありません。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