django csdn,django 文档

  django csdn,django 文档

  框架的数据库操作2009年06月26日星期五15:26Python代码班级博客(模特。型号):名称=型号CharField(max_length=100)标语=模型TextField()def _ _ unicode _ _(self):返回self。名字类作者(模特.型号):名称=型号CharField(max _ length=50)email=models .EmailField()def _ _ unicode _ _(self):返回自我名类条目(模型。模特):博客=模特ForeignKey(博客)headline=模特。CharField(max _ length=255)body _ text=models .TextField() pub_date=models .DateTimeField() authors=models .ManyToManyField(作者)def _ _ unicode _ _(self):返回self。头条新闻这是型号,有博客,作者,以及词条;其中进入分别与博客与作者表关联,条目与博客表是通过外键(车型ForeignKey())相连,属于一对多的关系,即一个进入对应多个博客,条目与作者是多对多的关系,通过莫德ManyToManyField()实现。一、插入数据库,用保存()方法实现,如下:来自mysite.blog.models导入博客b=博客(名称=披头士博客,标语=所有最新的披头士乐队新闻。)保存()二、更新数据库,也用保存()方法实现,如下:b5.name=新名称b5.save()保存外键和多对多关系的字段,如下例子:更新外键字段和普通的字段一样,只要指定一个对象的正确类型奶酪_博客=博客。对象。获取(name= Cheddar Talk )条目。博客=奶酪_博客条目。保存()更新多对多字段时又一点不太一样,使用添加()方法添加相关联的字段的值乔=作者。对象。创建(name= Joe )条目。作者。添加(乔)三、检索对象博客。对象姜戈。db。模特。经理。经理对象位于.b=Blog(name=Foo ,tagline= Bar )b . objectstraceback:属性错误:"无法通过博客实例访问管理器。1、检索所有的对象all_entries=Entry.objects.all()使用全部()方法返回数据库中的所有对象。2、检索特定的对象使用以下两个方法:过滤器(* *夸脱)返回一个与参数匹配的QuerySet,相当于等于(=).排除(* *克瓦查)返回一个与参数不匹配的QuerySet,相当于不等于(!=)。条目.对象.过滤器(发布日期_ _年=2006)不使用Entry.objects.all().过滤器(发布日期_ _年=2006年),虽然也能运行,全部()最好再获取所有的对象时使用。上面的例子等同于的结构化查询语言语句:slect * from条目,其中发布日期年份=2006 链接过滤器:条目。对象。过滤器(.headline__startswith=What .).排除(.pub_date__gte=datetime.now().).过滤器(.pub_date__gte=datetime(2005,1,1).)最后返回的查询是标题如"什么%"和"现在发布日期"和"发布日期"2005-01-01另外一种方法:Q1=入境。对象。过滤器(headline _ _开头= What )Q2=Q1。exclude(发布日期_ _ GTE=日期时间。现在())Q3=Q1。过滤器(发布日期_ _ GTE=日期时间。现在())这种方法的好处是可以对雌三醇环戊醚进行重用查询是延迟加载只在使用的时候才会去访问数据库,如下:q=入口。对象。filter(headline _ _ starts with= What )q=q . filter(pub _ date _ _ LTE=datetime。now())q=q . exclude(body _ text _ _ icontains= food )print q在打印q时才会访问数据库。其他的查询方法Entry.objects.all()[:5]这是查找前5个进入表里的数据Entry.objects.all()[5:10]这是查找从第5个到第10个之间的数据Entry.objects.all()[:10:2]这是查询从第0个开始到第10个,步长为2的数据入口。对象。order _ by(标题)[0]这是取按头条新闻字段排序后的第一个对象入口。对象。order _ by( headline )[0:1].获取()这和上面的等同的入口。对象。筛选器(pub _ date _ _ LTE= 2006-01-01 )等同于SELECT * FROM blog _ entry WHERE pub _ date= 2006-01-01 ;入口。对象。get(headline _ _ exact=人咬狗)等同于挑选.其中headline=人咬狗;博客。对象。get(id _ _ exact=14)#显式形式博客。对象。get(id=14)# _ _ exact是隐式形式这两种方式是等同的,都是查找id=14的对象。

  博客。对象。get(name _ _ iexact= Beatles blog )查找name=披头士博客的对象,不去饭大小写入口。对象。get(headline _ _ contains= Lennon )等同于挑选.像"%列侬%"这样的标题;开始于等同于结构化查询语言语句中的像"列侬%"这样的名字等同于结构化查询语言语句中的像"%列侬"这样的名字10 .入口。对象。过滤器(Blog _ _ name _ _ exact=披头士博客)查找进入表中外键关系blog_name=披头士博客的进入对象博客。对象。过滤器(entry _ _ headline _ _ contains= Lennon )查找博客表中外键关系进入表中的头条新闻字段中包含列侬的博客数据博客。对象。过滤器(entry _ _ author _ _ name= Lennon )查找博客表中外键关系进入表中的作者字段中包含列侬的博客数据博客。对象。过滤(entry _ _ author _ _ name _ _ is null=True)博客。对象。过滤器(条目_ _作者_ _为空=假,条目_ _作者_ _姓名_ _为空=真)查询的是作者姓名为空的值博客。对象。过滤器(entry _ _ headline _ _ contains= Lennon ,entry _ _ pub _ date _ _ year=2008)博客。对象。过滤器(entry _ _ headline _ _ contains= Lennon ).过滤器(条目_ _发布日期_ _年=2008)这两种查询在某些情况下是相同的,某些情况下是不同的。第一种是限制所有的博客数据的,而第二种情况则是第一个过滤器是限制博客的,而第二个过滤器则是限制进入的博客。对象。get(id _ _ exact=14)# Explicit表单博客。对象。get(id=14)# _ _ exact是隐含的博客。对象。get(PK=14)# PK隐含id _ _ exact等同于select * from where id=14#获取编号为1、4和七的博客条目Blog.objects.filter(pk__in=[1,4,7])等同于select * from where id in{1,4,7 } # Get id为14的所有博客条目Blog.objects.filter(pk__gt=14)等同于select * from id 14 entry。对象。filter(blog __id__exact=3)#显式表单条目。对象。过滤器(blog _ _ id=3)# _ _ exact是隐含的入口。对象。过滤器(blog _ _ PK=3)# _ _ PK隐含_ _ id _ _ exact这三种情况是相同的入口。对象。过滤器(headline _ _ contains= % )等同于挑选.其中标题如"% \ % %";缓存和查询设置在条目中打印e的标题。对象。all()]print[e . pub _ date for e in entry。对象。all()]应改写为:查询集=轮询。对象。all()print[查询集中p的p . headline评估查询集print[p . pub _ date for p in query set]#重用评估中的缓存。这样利用缓存,减少访问数据库的次数。

  四、用Q对象实现复杂的查询问(问题__startswith=谁) Q(问题__startswith=什么)等同于其中类似"谁%"的问题或类似"什么%"的问题民意测验。对象。get(Q(question _ _开头为="谁"),Q(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6))等同于SELECT * from polls,其中问题如"谁%"和(发布日期=2005年5月2日或pub _ date= 2005-05-06 )民意测验。对象。get(Q(pub _ date=date(2005,5,2)) Q(pub_date=date(2005,5,6)),question__startswith=谁)等同于民意测验。对象。get(question _ _ starts with= Who ,Q(pub_date=date(2005,5,2)) Q(pub_date=date(2005,5,6)))五、比较对象some_entry==其他_entry some_entry.id==其他_entry.id六、删除入口。对象。筛选器(发布日期_ _年=2005).delete()b=博客。对象。get(PK=1)#这将删除博客及其所有条目对象。删除()删除所有七、一次更新多个值#用2007年的发布日期更新所有标题10 .入口。对象。筛选器(发布日期_ _年=2007).更新(headline=一切都一样)b=Blog.objects.get(pk=1)#更改每个条目,使其属于这个博客Entry.objects.all().更新(博客=b)如果用保存()方法,必须一个一个进行保存,需要对其就行遍历,如下:对于my_queryset中的项目:item.save()关联对象一对多e=进入。对象。get(id=2)e . blog #返回相关的博客对象e=进入。对象。get(id=2)e . blog=some _ blog e . save()e=entry。对象。get(id=2)e . blog=None。save()# UPDATE blog _ entry SET blog _ id=NULL.e=进入。对象。get(id=2)打印电子博客#命中数据库以检索关联的博客打印电子博客#不打数据库;使用缓存版本e=Entry.objects.select_related().get(id=2)打印电子博客#不命中数据库;使用缓存版本打印电子博客#不打数据库;使用缓存版本b=博客。对象。get(id=1)b . entry _ set。all()#返回与博客相关的所有进入对象. b.entry_set是返回查询集的管理器b . entry _ set。filter(headline _ _ contains= Lennon )b . Entry _ set。count()b=博客。对象。获取(id=1)个b .条目。all()#返回所有与博客相关的进入对象b .条目是一个返回查询集的管理器b .条目。filter(headline _ _ contains= Lennon )b .条目。计数()不能从类中访问反向外键管理器;必须从实例中访问:Blog.entry_setadd(obj1,obj2,)将指定的模型对象添加到相关对象集中创建(**kwargs)创建一个新对象,保存它并将其放入相关对象集中。返回新创建的对象移除(obj1,obj2,)从相关对象集中删除指定的模型对象清除()从相关对象集中删除所有对象。多对多类型:e=入口。对象。获取(id=3)个作者。all()#返回此条目的所有作者对象e .作者。count()e .作者filter(name _ _ contains= John )a=作者。对象。get(id=5)a . Entry _ set。all()#返回此作者的所有条目对象。一对一类型:class EntryDetail(型号。型号):条目=型号OneToOneField(条目)详细信息=型号TextField()ed=条目详细信息。对象。得到(id=2)ed。条目编号返回相关的进入对象使用结构化查询语言语句进行查询:def my _ custom _ SQL(self):来自django。导入连接光标=连接。cursor()游标。execute( SELECT foo FROM bar WHERE baz=% s ,[self.baz]) row=cursor.fetchone()返回行应用于:http://canofy。哈维耶。com/blog/293494

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: