码迷,mamicode.com
首页 > 其他好文 > 详细

八月22日,django知识点总结:

时间:2016-08-23 11:27:53      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

同步数据库
python manage.py makemigrations
python manage.py migrate



一、增删改查

	1、添加表内容(三种方式)
		1.1 obj = models.UserType(列名=‘内容’)
			obj.save()
		1.2 models.UserType.objects.create(列名=‘内容’)

		1.3user_dict={‘列名‘:‘内容’,‘列名‘,‘内容’}
			models.UserType.objects.create(**user_dict)


	2、查询数据
		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、更改数据库内容
		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、删除数据
		4.1models.UserInfo.objects.filter(name=‘alex‘).delete()
			按条件删除
	
	
	
二、双下划线操作
	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)
			#添加内容
		
		

		
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

  

八月22日,django知识点总结:

标签:

原文地址:http://www.cnblogs.com/pythonxiaohu/p/5798471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!