Django模型层相关

ORM 查询

查看执行查询时的sql语句

  1. 如果是queryset对象 可以直接 .query 查看

  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',
            },
        }}
            
    

django测试环境的搭建

在test.py文件下:

import os 
    
 
if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "one_search.settings")
        import django
        django.setup()
        # 你就可以在下面测试django任何的py文件
        #注意,如果需要导入,必须在下面导入

单表查询

必知必会十三条

# 必知必会十三条
# 1.all()
# res=models.books.objects.all()
# print(res)

# 2.filter()                  QuerySet
# res=models.books.objects.filter(name='b3')
# print(res)

# 3.get()                    数据对象本身,如取到多个对象会报错
# res=models.books.objects.get(name='b2')
# print(res)

# 4.first()     拿第一个
# res=models.books.objects.filter(publisher=2)
# print(res.first())

# 5. last()     拿最后一个
# res = models.books.objects.filter(publisher=2)
# print(res.last())

# 6.exclude  除此之外        QuerySet
# res=models.books.objects.exclude(publisher=2)
# print(res)

# 7.values  QuerySet    列表套字典
# res=models.books.objects.values('name','price')
# print(res)

# 8.values_list  QuerySet    列表套元组
# res = models.books.objects.values_list('name','price','publisher_id')
# print(res)

# 9.count()  统计数据的个数

# 10.distinct() 去重
"""去重:数据必须是一模一样的情况下才能去重"""

# 11.order_by()
# res = models.Book.objects.order_by('price')  # 默认是升序
# # res1 = models.Book.objects.order_by('-price')  # 加负号就是降序
# print(res)
# 12.reverse()  前面必须是先结果排序才可以反转
# res = models.Book.objects.order_by('price').reverse()
# print(res)
# 13.exists()  一点卵用没有
# res = models.Book.objects.filter(pk=1).exists()
# print(res)

神奇的__查询

    # 神奇的__查询
    #  字段__lt >>>> 小于
    # res=models.books.objects.filter(price__lt=20)
    # print(res)

    #  字段__gt >>>> 大于
    # res=models.books.objects.filter(price__gt=20)
    # print(res)

    #  字段__lte >>>> 小于等于
    #  字段__gte >>>> 大于等于

    #  字段__in(容器) >>>> 从容器中按顺序匹配相等的值,返回QuerySet对象
    # res = models.books.objects.filter(price__in=[1,123])
    # print(res)

    #  字段__range(start,end) >>>> 从一个范围内匹配相等的值,返回QuerySet对象
    # res = models.books.objects.filter(price__range=(2,124))
    # print(res)



    #模糊匹配

    # 包含
    # res=models.books.objects.filter(name__contains='b')
    # print(res)

    # 开头与结尾
    # res=models.books.objects.filter(name__startswith='book')
    # print(res)

    # res=models.books.objects.filter(name__endswith='1')
    # print(res)

    #日期匹配
    res=models.books.objects.filter(publish_date__day='23')
    print(res)

多对多字段的四个方法

add() 括号内既可以传数字也可以传数据对象并且都支持传多个
set() 括号内 既可以传数字也传对象 并且也是支持传多个的但是需要注意 括号内必须是一个可迭代对象
remove() 括号内 既可以传数字也传对象 并且也是支持传多个的
clear()括号内不需要传任何参数 直接清空当前书籍对象所有的记录

跨表查询的规律

 ORM跨表查询
        1.子查询
        2.连表查询
        
    正反向的概念
        外键字段在谁那儿 由谁查谁就是正向
        
        谁手里有外键字段 谁就是正向查
        没有外键字段的就是反向
        书籍对象 查  出版社    外键字段在书籍       正向查询
        出版社 查 书籍         外键字段在书籍       反向查询
        
        
        正向查询按字段
        反向查询按表名小写 ...
    #查询书本名为占星术杀人事件的作者名称
    # 正
    # res=models.books.objects.filter(name='占星术杀人事件').values('author__name')
    # print(res)

    # 反
    res=models.author.objects.filter(books__name='占星术杀人事件').values('name')
    print(res)

posted @ 2019-10-24 20:37  Sheppard_xxx  阅读(140)  评论(0编辑  收藏  举报