Django_单表查询
Posted afrafre
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 # 时间年份模糊匹配
以上是关于Django_单表查询的主要内容,如果未能解决你的问题,请参考以下文章
python 之 Django框架(orm单表查询orm多表查询聚合查询分组查询F查询 Q查询事务Django ORM执行原生SQL)