1. 程式人生 > >s17day18django的查詢.ajax和分頁

s17day18django的查詢.ajax和分頁

ORM操作:

<1> 新增記錄方法

    # create方式
    #Book.objects.create(title="python",price=233)
    # save 方式
    book_obj=Book(title="Linux",price=122)
    book_obj.save()
	
	
	一對多新增方式:
	
	     Book.objects.create(title="python",price=223,publisher_id=2)
         book_obj=Book(title="Linux",price=122,publisher=publish_obj)
    多對多的新增方式:
        ManyToManyField:
			 # 繫結關係
			 book_obj.authors.add(*author_list) # book_obj.authors:  nid=2 的書籍關聯的作者的物件集合
			 # 解除關係
			 book_obj.authors.clear()
			 book_obj.authors.remove()
	    手動建立第三張表:
		    Book2Author.objects.create(book_id=1,author_id=1)


<2> 查詢
    單表查詢
		表.objects.all()         ----- QuerySet的集合物件  [obj1,obj2]   obj:就是當前操作表的一條記錄
		表.objects.filter()      ----- QuerySet的集合物件  [obj1,obj2]
		表.objects.get()         ----- model物件 : obj  當前操作表的一條記錄
		
		QuerySet.first()         ----- model物件    eg:  表.objects.all().first()
		QuerySet.last()          ----- model物件     
		
		表.objects.values("title","price")
		
		萬能的__:
		   
		表.objects.filter(欄位__keyword)
		  
				models.Tb1.objects.filter(id__lt=10,id__gt=1)   # 獲取id大於1 且 小於10的值
				models.Tb1.objects.filter(id__in=[11, 22, 33])   # 獲取id等於11、22、33的資料
				models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
				models.Tb1.objects.filter(name__contains="ven")
				models.Tb1.objects.filter(name__icontains="ven") # icontains大小寫不敏感
				models.Tb1.objects.filter(id__range=[1, 2])   # 範圍bettwen and
				#startswith,istartswith, endswith, iendswith
		

    關聯查詢(多表查詢)
	   sql:
			子查詢 
			select name from dep whrere id=
			(select dep_id from emp whrere name="張三")
			聯表查詢
			select dep.name from emp inner join dep on emp_dep_id=dep.id where emp.name="張三"
	
	
	    兩個手段: 1 物件  2  __

            1 物件
			        # 查詢python這本書的出版社的聯絡方式  (一對多)
					#ret=book_obj.publisher.email
					#print(ret)

					# 查詢Linux的所有作者的名字
					book_obj = Book.objects.get(title="Linux")

					author_list=book_obj.authors.all()
					for author in author_list:
						print(author.name)
			
			2  __     (******)    重點:filter方法與value方法都可以進行跨表查詢
			
			
			    #  查詢alex出版過的所有書籍名稱
				# 方式1  正向查詢
				# ret=Book.objects.filter(authors__name="alex").values("title")
		
				# 方式2  反向查詢
				# ret=Author.objects.filter(name="alex").values("book__title")
				# print(ret) # <QuerySet [{'book__title': '金瓶梅'}]>
				
				# 查詢出版了python這本書的出版社的名字
				# 正向:
				ret1=Book.objects.filter(title="python").values("publisher__name")
				# 反向:
				ret2=Publish.objects.filter(book__title="python").values("name")
			
    聚合與分組查詢

            sql: 

                聚合函式 max min count avg sum	
                select * from emp group by 欄位


            聚合:ret=Book.objects.all().aggregate(PriceAvg=Avg("price"),maxPrice=Max("price"))
			分組:ret=Book.objects.filter(authors__name="oldboy").aggregate(Sum("price"))
			
	F查詢與Q查詢
	
	        from django.db.models import F,Q
			#Book.objects.update(price=F("price")+100)
			# Q 查詢  邏輯與&     邏輯或 |    邏輯非  ~
			ret=Book.objects.filter(
				Q(title__startswith="p")|Q(title__startswith="L")
			)
	
<3> 修改
    QuerySet.update()

    eg:  Book.objects.filter(id__gt=10).update()	
    eg:  Book.objects.get(id=5).update()	 # models物件不能呼叫update方法

<4> QuerySet.delete()	
    

Ajax(重點)


    什麼是Json?
	是一種輕量級的資料交換格式
	
	json字串  : 符合json規範的字串
	
	json物件    : JS物件的子集
	
用Javascript語言與伺服器進行非同步互動,傳輸的資料為XML(當然,傳輸的資料不只是XML)。	


ajax優點:1 非同步互動 2 區域性重新整理

實現ajax:
          1  jquery(相容了大多數瀏覽器)
		      
			  形式1:
		      $.ajax(settings)
		      形式2:
			  $.ajax(url,[settings])
			  
			  
				  $.ajax({
					  url:"/path/"
					  type:"POST",
					  data:{"":""}
					  success:function(data){
						 alert(data)  // server返回的資料
						}
				  })
		  
		  2  JS

         
分頁器(page)

COOKIE & SESSION

本頁面三個demo分別為Orm_query   ajax_demo  page_demo