Django数据库 相关之select_related/prefetch_related

	- 性能相关
		user_list = models.UserInfo.objects.all()
			for row in user_list:
				# 只去取当前表数据
	
		select_related,主动连表查询【FK】
			
			user_list = models.UserInfo.objects.all().select_related('FK字段')
			for row in user_list:
				# 只去取当前表数据和FK表关联字段
		
		
			user_list = models.UserInfo.objects.values(...)
			for row in user_list:
				# 只去取当前表数据和FK表关联字段
		
			==》 连表降低性能
	
		prefetch_related
			user_list = models.UserInfo.objects.all().prefetch_related('FK字段')
	
			# [obj,obj,obj]
			# 1.查询用户表models.UserInfo.objects.all() 1000 select * from UserInfo ;
			# 2.把用户表中所有的ut_id拿到, 用户类型ID [1,2,3]  select * from UserType where id in [1,2,3]
			# 3.把用户表中所有的xx_id拿到, 用户类型ID [21,21,31]   select * from xx where id in [21,21,31]

			user_list = models.UserInfo.objects.all().prefetch_related('ut','xx')
			for row in user_list:
				print(row.name, row.pwd, row.ut.caption)
		补充:
			# [obj,obj,obj]
			# user_list = models.UserInfo.objects.all().only('name')   # 只取某个字段 select name from userinfo 
			# user_list = models.UserInfo.objects.all().defer('name')  # 排除当前字段	
			# for row in user_list:
			#     print(row.pwd)
	

  

原文地址:https://www.cnblogs.com/linzetong/p/8694607.html