欢迎来到天天文库
浏览记录
ID:13781753
大小:25.72 KB
页数:14页
时间:2018-07-24
《django orm机制总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、目录1.1.1生成查询1.1.2创建对象1.1.3保存修改的对象1.1.4保存ForeignKey和ManyToManyField字段1.1.5检索对象1.1.6检索所有的对象1.1.7过滤检索特定对象1.1.8链接过滤1.1.9过滤结果集是唯一 1.2.1结果集是延迟的 1.2.2其他的QuerySet方法1.2.3限制QuerySets1.2.4字段查找1.2.5跨关系查询1.2.6过滤器可参考模型字段1.2.7缓存查询集1.2.8比较对象1.2.9删除对象1.3.1一次修改多个对象1.3.2关系对象1.3.3One-to-many关系1.3.4Many-to-many关
2、系1.3.5One-to-one关系1.1.1生成查询你创建完数据模型,django会自动提供给你数据库抽象的API,可以创建、获取、修改、删除对象,本篇文档讲解如何使用API。我们参考下面模型,一个weblog:#博客classBlog(models.Model):name=models.CharField(max_length=100)tagline=models.TextField()def__unicode__(self):returnself.name#作者classAuthor(models.Model):name=models.CharField(max_len
3、gth=50)email=models.EmailField()def__unicode__(self):returnself.name#目录classEntry(models.Model):blog=models.ForeignKey(Blog)headline=models.CharField(max_length=255)body_text=models.TextField()pub_date=models.DateTimeField()authors=models.ManyToManyField(Author)n_comments=models.IntegerFiel
4、d()n_pingbacks=models.IntegerField()rating=models.IntegerField()def__unicode__(self):returnself.headline 1.1.2创建对象用python对象描述数据库表的数据,django使用一个直观的系统,一个模型类描述一个数据表,一个类的实例描述表的一条详细记录。使用模型的save()方法将对象创建到数据库。frommysite.blog.modelsimportBlogb=Blog(name='BeatlesBlog',tagline='AllthelatestBeatlesnew
5、s.')b.save()只有执行save方法时,django才会执行sql把对象写入数据库。1.1.3保存修改的对象保存修改仍然使用save()方法b5.name='Newname'b5.save()1.1.4保存ForeignKey和ManyToManyField字段cheese_blog=Blog.objects.get(name="CheddarTalk")entry.blog=cheese_blog#为ManyToManyField增加记录entry.save()joe=Author.objects.create(name="Joe")entry.authors.ad
6、d(joe)#为ForeignKey增加记录1.1.5检索对象从数据库里检索对象,可以通过模型的Manage来建立QuerySet,一个QuerySet表现为一个数据库中对象的结合,他可以有0个一个或多个过滤条件,在SQL里QuerySet相当于select语句用where或limit过滤。你通过模型的Manage来获取QuerySet,每个模型至少有一个Manage1.1.6检索所有的对象检索表中所有数据,最简单的方式是用all().all_entries=Entry.objects.all()1.1.7过滤检索特定对象检索过滤特定查询结果,有两个方法。filter(**k
7、wargs)返回一个新的匹配查询参数后的QuerySet exclude(**kwargs)返回一个新的不匹配查询参数后的QuerySetEntry.objects.filter(pub_date__year=2006)1.1.8链接过滤Entry.objects.filter(headline__startswith='What').exclude(pub_date__gte=datetime.now()).filter(pub_date__gte=datetime(2005,1,1))1.1.9过滤
此文档下载收益归作者所有