django-models 數據庫取值


  1 django.shortcuts import render,HttpResponse
  2 from app01.models import *
  3 # Create your views here.
  4 
  5 def index(request):
  6     return render(request,"index.html")
  7 
  8 def addbook(request):
  9     # 一對多的添加
 10 
 11 
 12 
 13     # 第一種方式
 14     # Book.objects.create(name="Linux運維",price=1133,pub_date="2017-11-22",publish_id=2)
 15 
 16 
 17 
 18     # 第二種添加方式 publish_id,沒辦法添加publish_obj
 19     # publish_obj=Publish.objects.filter(name="人民出版社")[0]
 20     # print("+++!!!****",publish_obj)
 21     # +++!!!**** Publish object (1)
 22     # print(type(publish_obj))
 23     # <class 'app01.models.Publish'>
 24 
 25     # Book.objects.create(name="GO語言", price=43, pub_date="2017-07-17", publish_id=2)
 26     # INSERT INTO `app01_book` (`name`, `price`, `pub_date`, `publis
 27     # h_id`) VALUES ('GO語言', 43, '2017-07-17', 2); args=['GO語言', 43, '20
 28     # 17-07-17', 2]
 29 
 30 
 31 
 32     # 拿到數據庫里面的表的值,有兩步,先拿到值,再賦給對象
 33     # 再從里面取值
 34     # 先拿到book表,取到name=python的值,再賦給對象
 35     # 如果是兩個值,會報錯,get只能得到一個值
 36     # book_obj=Book.objects.get(name='python')
 37     #
 38     # print("----",book_obj)
 39 
 40 
 41 
 42     # 一對多:book_obj.publish------一定是一個對象
 43     # 如果是要取外鍵的表的值,取publish會取到一個publish對象
 44     # print(type(book_obj.publish))
 45     # print(book_obj.publish.name)
 46     # print(book_obj.publish.city)
 47 
 48 
 49 
 50     # 從子表去找主表
 51     # 要拿到表中外鍵的表的值,步驟有
 52     # 先拿到publish表是name的值等於機械出版社的一整行對象pub_obj(表中有id,name,city)
 53     # SELECT `app01_publish`.`id`, `app01_publish`.`name`, `app01_pu
 54     # blish`.`city` FROM `app01_publish` WHERE `app01_publish`.`name` = '機
 55     # 械出版社'; args=('機械出版社',)
 56     # 把pub_obj結果賦值給publish,由id作為查找依據,再從book表中找到要查詢的name跟price
 57     # SELECT `app01_book`.`name`, `app01_book`.`price` FROM `app01_b
 58     # ook` WHERE `app01_book`.`publish_id` = 4  LIMIT 21; args=(4,)
 59 
 60     # get查找方式:表.objects.get()--只能有一個對象
 61     # pub_obj=Publish.objects.get(name='機械出版社')
 62 
 63     # filter查找方式:表.objects.filter()[0]--是對象的集
 64     # pub_obj2=Publish.objects.filter(name="山西出版社")[0]
 65     # print(pub_obj)
 66     # Publish object (4)
 67 
 68     # print(pub_obj.city)
 69     # 上海
 70     # print(pub_obj.id)
 71     # 4
 72 
 73     # 關鍵點:把publish表的對象放進filter里面篩選,再從里面values取值
 74     # ret=Book.objects.filter(publish=pub_obj).values("name","price")
 75     # ret2=Book.objects.filter(publish=pub_obj2).values("name","pub_date")
 76 
 77     # print(ret)
 78     # print(ret2)
 79     # 機械出版社出版的書籍跟價格---query對象
 80     # <QuerySet [{'name': 'Java', 'price': 65}, {'name': 'Linux開發', 'price
 81     # ': 1133}, {'name': 'Linux系統', 'price': 133}, {'name': 'Linux服務器',
 82     #  'price': 133}]>
 83 
 84 
 85 
 86     # 從主表再去找子表
 87     # ,第一步相同,從publish表找到name等於南方出版社,賦值給pub_obj
 88     pub_obj = Publish.objects.filter(name='山西出版社')[0]
 89     # 再從pub_obj里面找到book_set.all()(book子表的所有內容) 是一個對象集合
 90 
 91     # publish表拿到了book表的對象,表名+單引號,得到了表名里面的queryset對象.all()的所有值,
 92     # book_set.all(),再從里面values取值
 93     print(pub_obj.book_set.all())
 94     # <QuerySet [<Book: Django>, <Book: Linux運維>, <Book: sqlyog>, <Book: Linux代碼>, <Book: GO語言>, <Book: GO語言>, <Book: GO語言>, <Book: moring>]>
 95 
 96     print(pub_obj.book_set.all().values("name",'price'))
 97     # <QuerySet [{'name': 'Django', 'price': 45}, {'name': 'Linux運維', 'pri
 98     # ce': 1133}, {'name': 'sqlyog', 'price': 1133}, {'name': 'Linux代碼', '
 99     # price': 133}, {'name': 'GO語言', 'price': 43}, {'name': 'GO語言', 'pri
100     # ce': 43}, {'name': 'GO語言', 'price': 43}, {'name': 'moring', 'price':
101     #  23}]>
102 
103     # 更簡便的第3種方式:
104     ret=Book.objects.filter()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM