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')

 

posted @ 2021-10-10 22:15  dongys_z  阅读(34)  评论(0)    收藏  举报