八月22日,django知識點總結:

八月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)
相關文章
相關標籤/搜索