zoukankan      html  css  js  c++  java
  • Django查询笔记1

    models.Book.objects.filter(**kwargs):   querySet   [obj1,obj2]
    models.Book.objects.filter(**kwargs).values(**kwargs)       :  querySet  [{},{},{}]
    models.Book.objects.filter(**kwargs).values_list(title)  :  querySet  [(),(),()]
    
    跨表查询总结:
        class Book(models.Model):
    		title = models.CharField(max_length=32)
    		publish=models.ForeignKey("Publish")          # 创建一对多的外键字段
    		authorList=models.ManyToManyField("Author")   # 多对多的关系,自动创建关系表
      
    	class Publish(models.Model):
    		name = models.CharField(max_length=32)
    		addr = models.CharField(max_length=32)
               
    	class Author(models.Model):
    		name=models.CharField(max_length=32)
    		age=models.IntegerField()
    		ad=models.models.OneToOneField("AuthorDetail")
    	
    	class AuthorDetail(models.Model):
    		tel=models.IntegerField()
    
    基于对象关联查询:		
    	if 一对多查询(Book--Publish):
    	      正向查询,按字段:
    	      book_obj.publish   :  与这本书关联的出版社对象    book_obj.publish.addr: 与这本书关联的出版社的地址
    		  反向查询,按表名_set
              publish_obj.book_set: 与这个出版社关联的书籍对象集合	publish_obj.book_set.all() :[obj1,obj2,....]	
        
    	if 一对一查询(Author---AuthorDetail):
    	      正向查询,按字段:
    		  author_obj.ad : 与这个作者关联的作者详细信息对象
    		  
    		  反向查询:按表名:
    		  author_detail_obj.author  : 与这个作者详细对象关联的作者对象
    		  
        if  多对多(Book----Author):
    	
    	    正向查询,按字段:  		
    		book_obj.authorList.all(): 与这本书关联的所有这作者对象的集合  [obj1,obj2,....]
    		
            反向查询,按表名_set:
            author_obj.book_set.all() : 与这个作者关联的所有书籍对象的集合
    
    基于双下滑线的跨表查询:
    
        if 一对多查询(Book--Publish):
    	
            正向查询,按字段:		
    		# 查询linux这本书的出版社的名字:
    		models.Book.objects.all().filter(title="linux").values("publish__name")
    		
    		反向查询:按表名:
    		# 查询人民出版社出版过的所有书籍的名字
    		models.Publish.objects.filter(name="人民出版社出版").values("book__title")
    		
    	if 一对一查询(Author---AuthorDetail):
    	
     	    正向查询,按字段:
    		models.Author.objects.filter(name="egon).values("ad__tel")
    		
    		反向查询:按表名:
    		models.AuthorDetail.objects.filter(tel="151").values("author__name")
    		
    	if  多对多(Book----Author):
    	
        	正向查询,按字段:
    		models.Book.objects.filter(title="python").values("authorList__name")     [{},{},{},{}]
    		
    		正向查询,按表名:
    	    models.Author.objects.filter(name="alex").values("book__price")
    		
    注意:
    
    	publish=models.ForeignKey("Publish",related_name="bookList")
    	authorlist=models.ManyToManyField("Author",related_name="bookList") 
    	ad=models.models.OneToOneField("AuthorDetail",related_name="authorInfo")
    
    	反向查询的时候都用:related_name
     
    	聚合查询:
    		querySet().aggregate(聚合函数)------返回的是一个字典,不再是一个querySet
    	 
    		Book.objects.all().aggregate(average_price=Avg('price'))
        
     
    分组查询:
        querySet().annotate() --- 返回的是querySet
    	#统计每一个出版社中最便宜的书籍的价格
    	sql:
    	   select Min(price) from book group by publish_id;
    	
    	ORM:
    	models.Book.objects.values("publish__name").annotate(Min("price"))
    	
    F查询 与 Q查询
    	F()查询
    	Django提供的F()来做两个字段的比较;
    	Django支持F()对象之间以及 F()对象和常熟之间的加减乘除和取模操作;
    	修改操作也可以使用F函数,比如将每一本书的价格提高7元;
    	
    	Q()查询
    	filter()等方法中的关键字参数查询都是期进行“AND”的,。如果你需要执行更加复杂的查询(例如or语句),你可以使用Q对象。
    	Q对象可以使用& 和| 操作符组合起来,当一个操作符在两个Q之间使用的时候,他会产生一个新的Q对象
    
    http无法保存状态:此时cookie就诞生了
    cookie:客户端浏览器保存的一组组的键值对:-------{"":"","":"","":""}
    但是cookie的所有信息都在浏览器是上边了,这样很不安全,
    此时cookie+session就诞生了:
    session:服务器上保存的用户信息

    浏览器(一段代码展示,其实金和cookie差不多):

    url: http://127.0.0.1:8000/login/ get 
    url: http://127.0.0.1:8000/login/ post user pwd

    url: http://127.0.0.1:8000/home/

    {"sessionID":"dfhasdjfhkjlcn4352kjdsfhkjsd"}

    if post:

    requset.session["IS_LOGON"]=True
    requset.session["USER"]=username

    return redirect("/home/")

    Django: 
    1 s="sdgsdfg4565dfgsdfgsdf" 
    2 在django-session表中,添加一条记录
    insert into django-session values (s,"{"IS_LOGON":True,"USER":egon}",12321)
    3 obj.set_cookie("sessionID",s) {"sessionID":"sdgsdfg4565dfgsdfgsdf"} sdgsdfg4565dfgsdfgsdf:{d}

    重定向:

    /home/ ----> {"sessionID":"fasdlkfjsakdl324ada2adhdjlka99"}

    request.session.get("IS_LOGON",None)

    在django-session表中,进行查询:
    s=requset.COOKIE.get("sessionID")
    select session-data from django-session where session-key=s


  • 相关阅读:
    bus总线
    vue 动态组件、父子组件传参
    echarts
    记录板
    留言板
    如何移除双系统mac中的windows系统
    Kernel,Shell,Bash 的关系
    zju 校队选拔 被虐记
    COGS 2638. 数列操作ψ 线段树
    退役公告【现已复活】
  • 原文地址:https://www.cnblogs.com/52-qq/p/7761614.html
Copyright © 2011-2022 走看看