我有这个代码:
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")
。。。有时候,这种例外会被提出。怎么会这样?在
偶尔,一天几次,它会返回看似随机的评论实例。通常它的行为与预期的一样,并且不返回任何结果。在
这是注释表的id字段:id int(11) NOT NULL AUTO_INCREMENT
,所以它不是可以为null的。这是一个InnoDB表。在
至于注释。所有\u对象,这是它的定义:all_objects = Manager()
,它是该类中的第一行。在
我们在Django 1.2.7上。在
更新 将日志记录添加到异常以获取引发异常时生成的SQL。这里是:
^{pr2}$
排除简单的事情:
SELECT COUNT(id) FROM <your_comment_table> WHERE id <= 0 OR id ='' OR id IS NULL
您的代码在逻辑上应该可以工作,以防止模型代码中出现不可靠的东西,这使我相信它一定是与数据相关的。在
编辑
另一个想法是,看看django的ORM在查询什么(这应该可以告诉我们发生了什么):
这种行为是由非常奇怪的(在这个程序员看来)MySQL行为引起的,它控制着by the ^{} variable (在MySQL<;5.5.3中默认为
1
):{a2中的一个特性是由^核心}引起的
因此,解决方案是禁用MySQL数据库using the ^{} statement 的
SQL_AUTO_IS_NULL
选项。您可以在settings.py
中使用类似的方法来执行此操作:长期而言,你可以试着在the django-developers list上敲鼓,让他们重新考虑their earlier position:
相关问题 更多 >
编程相关推荐