s17day18django的查詢.ajax和分頁
阿新 • • 發佈:2019-01-23
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