Django_单表查询

一、测试文件运行Django项目 (自己建的test.py文件要配置一下)

# django 的文件可以直接使用, 怎么使用项目的文件???(msgi.py 文件中的)
1. 加载项目配置文件 
	import os
	os.environ.setdefault("DJANGO_SETTINGS_MODULE","项目名.settings")
2. 启动Django
	import django
	django.setup()
3. 使用项目中的各个模块
	from app.models import User

数据库的单表查询(简单的增删改查)

1. 增
	User.objects.create(name='owen',age=10)
	
	user = User(name='owen',age=10)
	user.save()
2. 查
	User.objects.filter(name='owen')   # 结果是一个list
	
	user = User.objects.get(id=1)   # 只能操作有且只有一条数据的记录(不存在或多个都报错)
3. 改
	User.objects.filer(name='owen').update(name='ooo')
	
	users = User.objects.filter(name='owen')
	for user in users:
		user.name='owen'
		user.save()
4. 删
	User.objects.filter(name='owen').delete()
	
	user = User.objects.filter(name='ooo').first()
	user.delete

单表操作函数

1. all(): 查所有的list,支持正向索引取值[i], 支持索引切片[m:n]
	user_list = User.objects.all()
	QuerySet对象都有query属性
	user_list.query  (内部运行的sql语句)
	
2. filter(): 查满足条件的所有结果list
3. get(): 满足条件的唯一对象obj, 否则抛异常
4. exclude()排除: 查询满足条件的对立面的所有结果list
5. order_by: 按指定字段进行排序后的list, 'tag_name' 正序,  '-tag_name'降序
	list = User.objects.order_by('id')     order_by('-id')  反序
6. reverse(): 反转排序查询所有的list
	User.objects.order_by('id').reverse()   和排序连用
7. count():统计查询的list 的长度
	num = User.objects.all().count()
	
8. first():返回查询结果中的第一个对象obj
9. last():返回查询结果中的最后一个对象obj

10. exist(): 判断查询结果是否存在,布尔值 (True or False)
	res = User.objects.all().exists()   sql:优化limit1
11. values(): 按指定字段们,返回存放包含字段们字典的列表list
	可切片
	list = User.objects.values('name','pwd')
	[{'name':'egon','pwd':123},{'name':'alex','pwd':123}]
	
12: values_list(): 和values类似,返回存放数据的元组的列表list
	[('egon',123),('alex',123)]
13. distinct(): 从查询结果中踢出重复字段(和values结合使用)
	list = User.objects.all().distinct()   # id 不一样,不去重
	list = User.objects.values('name','age').distinct()

单表的模糊查询

User.objects.filter(可选模糊查询)(id_gt=3)
# 整型相关
age_exact = 8 : 确切匹配8
age_in = [8,10]
age__gt=8  # 大于8
age__gte=8  # 大于等于8
age__lt=8  # 小于8
age__lte=8  # 小于等于8
age__range=[8, 10]  # 8到10之间
age_isnull= 0|1  # 0: 不为空  1: 为空

# 字符串相关
name__startswith  # 后方模糊匹配
name__endswith  # 前方模糊匹配
name__contains  # 前后方均模糊匹配
name__regex  # 正则匹配
name__istartswith  # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
	User.objects.filter(name_regex="a{0,}")
	User.objects.filter(name_regex="[a-zA-Z0-9]{1,})
	
	
	
# 时间相关
birthday__year=2008  # 时间年份模糊匹配
	


猜你喜欢

转载自www.cnblogs.com/Afrafre/p/12799193.html