又遇到了灵异事件。。Django的ORM。orz.
昨天对Blog的程序进行了优化。见前一篇文章, 因于文章分类允许为Null导致查询文章列表时(列表需要显示分类名)Select_related不起作用引发了1+N问题,所以我把Null= True去掉。减却了多余的N条查询。但是奇怪的事情发生了,我从早上开始发觉,首页列表的作者变成了Blog的Title。但代码明明是 {{entry.author.name}}!我改成其他属性试下,依然是Print出Blog的其他属性。我回想昨天更新做过的改动,撒销均无效。最后 想起会不会是因为改了Model的属性引起的,于是我把分类的Null=True加上。果然!显示正常了。这是为什么呢?不解!缓存?没可能吧?
我是不可能再把分类的Null=true保留的,因为实践证明这样对性能损耗太大。但不加上又出现属性值错乱的情况。怎么办?最后我作了个尝试,我把Model里面的属性调换了一下位置,原来Author在Catelog下方:
catelog = models.ForeignKey(Catelog,verbose_name='分类')
author = models.ForeignKey(Account,verbose_name='作者')
现在改回来,Author写在Catelog上方。显示正常。My god!
author = models.ForeignKey(Account,verbose_name='作者')
catelog = models.ForeignKey(Catelog,verbose_name='分类')
这是我的程序的Bug?还是Django的Bug?还是我的Bug?我想这个解决的办法不是好办法。
我拿到三种情况的Sql。一是分类为Null的查询,二是分类为NotNull的查询,三是分类为NotNull且Author属性排在 Catelog前面的查询。结果是第一和第三种情况blog_account_name所在的列位置是一样的。这是否说明Django的确是记住查询结果 的位置并且缓存起来了?但缓存到哪里了呢?如果刷新呢?
原因追寻中。原文见:http://www.fallever.com/blog/jeff/17/
分享到:
相关推荐
django ORM机制的概念及方法总结
django-bulk-update, 在 Django ORM上使用一个查询进行批量更新 django-bulk-update 简单批量更新 Django ORM或者 helper 函数。这个项目旨在批量更新给定的对象,使用英镑的一个查询 Django 。安装pip install ...
动态创建一个模型的多个table name, 并通过 Django ORM 操作
django orm 外键操作 练习示例
django ORM 按月分组统计 源码,账号:admin,密码:admin123
自制单独提取的DjangoORM,可以使用manage.py inspectdb 从数据库直接生成model,简单方便,稍微简单的配置数据库信息就可以让一些小的APP直接使用djangoORM。单独提取的文件总大小为8KB。操作方法与在Django内使用...
django orm oldboy session 3
单独提取django的orm进行使用,对于习惯使用django开发的开发者,这个功能非常不错
主要介绍了使用 django orm 写 exists 条件过滤实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Django的ORM常用查询操作总结.txt
django-wham, REST api伪装为 Django ORM模型 wham作为 Django ORM模型的 REST api使用 django-wham,你可以按照查询 Django 模型的方式来查询 REST api:>>> artist = SpotifyArtist.
主要介绍了django框架使用orm实现批量更新数据的方法,结合实例形式简单分析了Django基于orm操作数据库更新数据的相关实现技巧,需要的朋友可以参考下
ORM的模型接口。 重要提示:该项目应被视为实验性的进行中项目。 当前的API设计和行为尚未最终确定,并且尚未确定特定的版本支持。 安装 pip install pydantic-django 用法 要求:Python 3.7+,Django 2+ 基本...
主要介绍了Django ORM 查询表中某列字段值的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
django-celery-beat, Django ORM支持的celery 周期任务 数据库后台任务 版本:站点:下载:关键字:关键字:1.1.1http://django-celery-beat.readthedocs.io/http://pypi.python.org/pypi
DjangoX, 用于 Django ORM数据或者API数据管理的web GUI套件 DjangoX用于 Django ORM数据或者API数据管理的web GUI套件支持Python2和 Python3 ;兼容 Django1.5 easy_install djangoeasy_i
主要介绍了浅谈优化Django ORM中的性能问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64, null=False, unique=True) def __str__(self): ...
本文主要列举一下django orm中的常用查询的筛选方法: 大于、大于等于 小于、小于等于 in like is null / is not null 不等于/不包含于 其他模糊查询 model: class User(AbstractBaseUser, ...
主要给大家介绍了关于Django ORM框架的定时任务如何使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。