八月22日,知識點總結: python manage.py makemigrations python manage.py migrate
unique=true是指這個字段的值在這張表裏不能重複,全部記錄值都要惟一,就像主鍵那樣搜索nullable=false是這個字 段在保存時必需有值,不能仍是null值就調用save去保存入庫python
1、增刪改查 一、添加表內容(三種方式) 1.1 obj = models.UserType(列名=‘內容’) obj.save() 1.2 models.UserType.objects.create(列名=‘內容’) 1.3user_dict={'列名':‘內容’,'列名','內容’} models.UserType.objects.create(**user_dict) 二、查詢數據 2.1 request.POST.get('usernaem') #獲取單條數據,不存在則報錯(不建議) 2.2 ret =models.UserType.objects.all() #獲取所有 print(type(ret),ret.query) for item in ret: #根據循環能夠輸出表內容 print(item,item.nid,item.caption) #ret.query 返回一個原生SQL #ret,獲得一個特殊的QuerySet對象 2.3 ret =models.UserType.objects.all().values('nid') print(ret) #values('xxx') #返回一個列表中包含字典 2.4 ret=models.UserType.objects.all().values_list('nid') print('ret') #返回一個列表中加元組 2.5 model.UserType.objects.filter(name='name') # 獲取指定條件的數據 三、更改數據庫內容 3.1 models.UserInfo.objects.filter(user='alex').update(email='123@qq.com') #將指定的條件更新到數據庫,可使用字典**kwargs 3.2 obj = models.UserInfo.objects.get(user='alex') obj = email='!!!!@!!!!!' obj.save() #修改單條數據 四、刪除數據 4.1models.UserInfo.objects.filter(name='alex').delete() 按條件刪除 2、雙下劃線操做 1.連表操做 1.1 ret =models.UserInfo.objects.all().values('user','user_type__caption') ##user_type__caption __雙下劃線在這是執行連表操做,輸出另外表內容 1.2 拿出類型是超級管理員的全部用戶 ret = models.UserInfo.objects.filter(user_type__caption="管理員").values('user','user_type__caption') 2.多對多(ManyToMany) 注:建立多臺主機,多個部門 1.自動建立關係表 1.1 h2g =models.ManyToManyField('host') #建立多對多關係 1.1.1 將多臺機器分配給一個組 add添加關係,remove 刪除表關係,delete刪除表關係和表 set 添加,刪除 h = Host.objects.get(hid=1) ##只刪除表關係 h.group_set.remove(*Group.objects.filter(gid__gt=1)) h = Host.objects.get(hid=1) ##添加表關係 h.group_set.add(*Group.objects.filter(gid__gt=1)) h = Host.objects.get(hid=1) h.group_set.all().delete() #delete刪除表關係和表 obj =Group.objects.get(gid=1) print(obj.gid,obj.name,obj.h2g.all()) #bj.h2g.all() 是關係表,沒建立關係輸出空列表 q =models.objects.filter(hid__gt=3) obj.h2g.add(*q) #將多臺主機分到obj組 2.2.2 將一臺主機分給多個組 h =Host.objects.get(hid=1) obj =Group.objects.get(gid=1) obj.h2g.add(h) ##主機id等於1分配到第一組 obj =Group.objects.get(gid=2) ## obj.h2g.add(h)###主機id等於1分配到第二組 h =models.Host.objects.get(hid=1) ##找到第一臺主機 h.group_set.add(*Group.objects.filter(gid__gt=2)) #gid大於2的全部分組分配給H主機 反向查找 表名__set ,查找什麼表名就是什麼 h.models.Host.objects.get(hid=1) h.group_set.add(*models.Group.objects.filter(gid__gt=12)) 注: h = Host.objects.get(hid=1) h.group_set.add(1) ##能夠直接寫數字添加 h.group_set.add(Group.objects.get(gid=1)) h.group_set.add(*[1,2,3]) ##能夠用列表添加關係 h.group_set.set(Group.objects.filter(gid__gt=18), clear=True) clear = True 清空在設置(添加) set 不清空添加 注:附加 update_or_create,get_or_create 這兩個是同樣的 都是給group和關係表添加數據 前提是關係表裏不存在這個數據 列: # r = h.group_set.update_or_create(name='技術部') 若是沒有技術部,就給group組中加上技術部,關係表中自動關聯一條數據 # print(r) # r = h.group_set.get_or_create(name='人事部') # print(r) 2.本身建立表關係 HostToGroup.objects.create(Host_id_id=1,group_id_id=2,status=11) #添加內容 建立索引 class HostToGroup(models.Model): # hgid = models.AutoField(primary_key=True) # host_id = models.ForeignKey('Host') # group_id = models.ForeignKey('Group') # status = models.IntegerField() # class Meta: # unique_together = [ ###定義惟一索引,裏面的索引值就不能夠重複 # ('host_id', 'group_id'), # ]
實例git
# 一、查詢全部圖書類型爲「科學」的全部書籍的 名稱、價格、發佈時間、圖書類型(兩種方式)
# 二、查詢做者「alex"參與編寫的全部書籍(兩種方式)
class Author(models.Model): ''' 做者 ''' name = models.CharField(max_length=100) age = models.IntegerField() class BookType(models.Model): ''' 圖書類型 ''' caption = models.CharField(max_length=64) class Book(models.Model): ''' 圖書 ''' name = models.CharField(max_length=64) pages = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) # 數字長度max_digits,有效位數decimal_places pubdate = models.DateField() ##出版事件 authors = models.ManyToManyField(Author) book_type = models.ForeignKey(BookType)
表中添加內容數據庫
# models.Author.objects.create(name='alex',age=12) # models.Author.objects.create(name='sunqihu',age=15) # models.Author.objects.create(name='jay',age=16) # # models.BookType.objects.create(caption='文學') # models.BookType.objects.create(caption='科學') # models.BookType.objects.create(caption='數學') # # book_mode={"name":"一路向西", # "pages":300, # "price":50, # "pubdate":"2011-09-09", # "book_type_id":2 # # } # models.Book.objects.create(**book_mode)
添加關係對象
# h =models.Book.objects.get(id=1) # h.authors_set.add(models.Author.objects.filter(id=2)) # h =models.Book.objects.all().get(id=1) # obj =models.Author.objects.all().filter(id=3) # print(type(obj)) # # print(h,type(h)) # obj.book_set.add(h)
# 第一種方法 # rat = models.Book.objects.filter(book_type__caption='科學').values( # 'name','price','pubdate','book_type__caption' # ) # print(rat) # for i in rat: # print(i) # rem =models.Book.objects.filter(authors__name='sunqihu').values('name','authors__name') # print(rem) #第二種方法 # objs =models.BookType.objects.get(caption="科學") # obj =objs.book_set.values('name','price','pubdate','book_type__caption') # print(obj) # obj = models.Author.objects.get(name='sunqihu') # obs =obj.book_set.values('name','authors__name') # print(obs)