django复习笔记2
1.单表操作
(1)增
res=models.User.objects.create(name='jason',age=18,register_time='2002-1-21')
import datetime ctime = datetime.datetime.now() user_obj = models.User(name='egon',age=84,register_time=ctime) user_obj.save()
(2) 删
pk会自动查找到当前表的主键字段 指代的就是当前表的主键字段
res = models.User.objects.filter(pk=2).delete()
user_obj = models.User.objects.filter(pk=1).first()
user_obj.delete()
(3)修改
models.User.objects.filter(pk=4).update(name='egonDSB')
user_obj = models.User.objects.get(pk=4)
user_obj = models.User.objects.filter(pk=6)
user_obj.name = 'egonPPP'
user_obj.save()
2.必知必会13条
(1)all() 查询所有数据
(2)filter() 带有过滤条件的查询
(3)get() 直接拿数据对象 但是条件不存在直接报错
(4)first() 拿queryset里面第一个元素
res = models.User.objects.all().first()
(5)last()
res = models.User.objects.all().last()
(6)values() 可以指定获取的数据字段
res = models.User.objects.values('name','age') # <QuerySet [{'name': 'jason', 'age': 18}, {'name': 'egonPPP', 'age': 84}]>
(7)values_list() 列表套元祖
res = models.User.objects.values_list('name','age') # <QuerySet [('jason', 18), ('egonPPP', 84)]>
(8)distinct() 去重
res = models.User.objects.values('name','age').distinct()
(9)order_by()
res = models.User.objects.order_by('age') # 默认升序 res = models.User.objects.order_by('-age') # 降序
(10)reverse() 反转的前提是 数据已经排过序了 order_by()
res = models.User.objects.all() res1 = models.User.objects.order_by('age').reverse()
(11)count() 统计当前数据的个数
res = models.User.objects.count()
(12)exclude() 排除在外
res = models.User.objects.exclude(name='jason')
(13)exists() 基本用不到因为数据本身就自带布尔值 返回的是布尔值
res = models.User.objects.filter(pk=10).exists()
3.测试脚本
脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以
import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day64.settings") import django django.setup()
在这个代码块的下面就可以测试django里面的单个py文件了
4.查看内部sql语句
(1)方式1
res = models.User.objects.values_list('name','age')
# <QuerySet [('jason', 18), ('egonPPP', 84)]>
(2)方式2
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
4.双下划线查询
1.年龄大于35岁的数据
res = models.User.objects.filter(age__gt=35)
2 年龄小于35岁的数据
res = models.User.objects.filter(age__lt=35)
大于等于 小于等于
res = models.User.objects.filter(age__gte=32)
res = models.User.objects.filter(age__lte=32)
年龄是18 或者 32 或者40
res = models.User.objects.filter(age__in=[18,32,40])
年龄在18到40岁之间的 首尾都要
res = models.User.objects.filter(age__range=[18,40])
查询出名字里面含有s的数据 模糊查询
res = models.User.objects.filter(name__contains='s')
是否区分大小写 查询出名字里面含有p的数据 区分大小写
res = models.User.objects.filter(name__contains='p')
忽略大小写
res = models.User.objects.filter(name__icontains='p')
res = models.User.objects.filter(name__startswith='j')
res1 = models.User.objects.filter(name__endswith='j')
查询出注册时间是 2020 1月
res = models.User.objects.filter(register_time__year='2020') res = models.User.objects.filter(register_time__month='1')
5.联表查询(基于双下划线的跨表查询)
1.查询jason的手机号和作者姓名
res=models.Author.objects.filter(name='jason').values('author_detail__phone','name')
反向
res = models.AuthorDetail.objects.filter(author__name='jason')
拿作者姓名是jason的作者详情
res = models.AuthorDetail.objects.filter(author__name='jason').values('phone','author__name')
2.查询书籍主键为1的出版社名称和书的名称
res = models.Book.objects.filter(pk=1).values('title','publish__name')
反向
res = models.Publish.objects.filter(book__id=1).values('name','book__title')
3.查询书籍主键为1的作者姓名
res = models.Book.objects.filter(pk=1).values('authors__name')
反向
res = models.Author.objects.filter(book__id=1).values('name')
查询书籍主键是1的作者的手机号
res=models.Book.objects.filter(pk=1).values('authors__author_detail__phone')

浙公网安备 33010602011771号