---恢復內容開始---html
---------------------------------python
---------- 單表操做linux
---------------------------------shell
向數據庫的表單中添加內容的兩種方式數據庫
def addbook(request): # b=Book(name="python基礎",price=99,author="yuan",pub_date="2017-12-12") # b.save() #添加內容的方式一 Book.objects.create(name="老男孩shell",price=78,author="oldboy",pub_date="2016-12-14") # 方式二 return HttpResponse("添加成功")
修改表單內容的兩種方式django
def update(request): #表記錄的修改方式一 推薦用這種方式 # Book.objects.filter(author="yuan").update(price="999") #表記錄的修改方式二 b = Book.objects.get(author="oldboy") b.price=120 b.save() return HttpResponse("修改爲功!")
刪除表單內容運維
def delete(request): Book.objects.filter(author="oldboy").delete() return HttpResponse("刪除成功!")
---------------------------------函數
--------------------------------------linux運維
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
表記錄的查詢spa
def select(request): # book_list=Book.objects.all() #查詢列表全部信息 # print(book_list) # print(book_list[0]) # book_list=Book.objects.all()[:3] #取前三條 # book_list=Book.objects.filter(id=2) #獲得的結果是一個集合,只不過只有一個id=2的對象 # book_list=Book.objects.all()[::2] #兩個兩個取,或者說是取一個,隔一個 # book_list=Book.objects.first() #取第一個 # book_list=Book.objects.last() #取最後一個 # book_list=Book.objects.get(id=2) #取一個id=2的對象,,若是按照做者取,加入有兩本書有同一個做者,會報錯 ret = Book.objects.filter(author="yuan").values("name","price") #獲得的結果是字典 ret2 = Book.objects.filter(author="yuan").values_list("name","price") #獲得的結果是元祖 print(ret) print(ret2) #book_list=Book.objects.all().values("name).distinct() #去重 book_count=Book.objects.all().values("name").distinct().count() print(book_count) #萬能的雙下劃線 __ # book_list=Book.objects.filter(price__gt=50).values("name","price") #__gt是大於,__lt小於 book_list=Book.objects.filter(name__icontains="P").values("name","price") #__icontains 包含大小寫p.contains只包含P return render(request,"index.html",{"book_list":book_list})
多表操做(一對多):
添加記錄:
Book.objects.create(name="linux運維",price=77,pub_date="2017-12-12",publish_id=2) #方式一
publish_obj=Publish.objects.filter(name="人民出版社")[0]
Book.objects.create(name="GO",price=23,pub_date="2017-5-12",publish=publish_obj)#方式二
查詢記錄(經過記錄):
正向查詢:
book_obj=Book.objects.get(name="python")
pbu_obj = book_obj.publish------>書籍對象對應的出版社對象
pub_obj.name
反向查詢:
pub_obj = Publish.objects.filter(name = "人民出版社")
print(pub_obj.book_set.all().values("name","price"))
查詢記錄(filter values 雙下劃線__)
ret = Book.objects.filter(publish__name="人民出版社").values("name","price")
print(ret)
ret = Book.objects.filter(publish__name="人民出版社").values("name","price")
print(ret)
#求Python這本書的出版社的名字
ret2 = Publish.objects.filter(book__name="Python").values("name")
print(ret2)
ret3=Book.objects.filter(name="python").values("publish__name")
print(ret3)
#在北京的出版社出版過的書名
ret4= Book.objects.filter(publish__city="北京").values("name")
print(ret4)
#JAVA 這本書的出版社的所在城市
ret5 = Publish.objects.filter(book__name="JAVA").values("city")
print(ret5)
---------------------------------------------------------------------
多表操做(多對多)
建立多對多關係:authors=models.ManyToManyField("Author") (推薦)
書籍對象的全部關聯做者 obj=book_obj.authors.all()
綁定多對多關係 添加關係obj.add(*Queryset) 解除關係obj.remove(author_obj)
手動建立第三張表
# class Book_Author(models.Model):
# book=models.ForeignKey("Book",on_delete=models.CASCADE)
# author=models.ForeignKey("Author",on_delete=models.CASCADE)
掌握:經過 filter values (雙下劃線)進行多對多的關聯查詢 (形式和一對多同樣)
多表查詢使用聚合函數前須要先倒入:
from django.db.models import Avg,Min,Sum,Max,Count