• django之orm单表查询


    这几天重新学习了一下django的orm,以此作为记录来分享。

    Part1:修改配置,生成表

    在写数据和查数据之前,首先先得把django配置一下,具体配置如下:

    1.先在公共项目的settings中配置数据库信息

     2.在公共项目的__init__.py文件中导入pymysql并写入一行代码

    3.在需要生成表的app的models.py中写生成的表

    from django.db import models  
    
    # Create your models here.
    
    
    class Book(models.Model):
        username = models.CharField(max_length=64, unique=True)
        email = models.EmailField()
        password = models.CharField(max_length=128)
        register_date = models.DateTimeField("注册日期", auto_now_add=True)
        signature = models.CharField(verbose_name="签名", max_length=128, blank=True, null=True)
        num = models.IntegerField(null=True)
    
        def __str__(self):
    
            return self.username

     这3步都完成后,我们就可以通过命令行来创建表了(在项目根目录执行)

    1. python manage.py makemigrations

    2.python manage.py migrate

    执行完以后你就可以去数据库查看一下 表了

     红框就是你app名加上类名拼接出来的表名,ok通过django把表建好了,那接下来我们就开始增加数据和查询数据!!!

    Part2:新增数据

    先在view.py中新增一个视图函数

    方式一:

    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    from GmTool.models import Book
    
    
    def single_table(request):
    
        # ---------------------------------------------新增---------------------------------------------#
    
        # 方式一:
        book_obj = Book(username='leogao', email='1823231344', password='19961030', register_date='2020-10-30', signature='hh', num=100)
        book_obj.save()
        return HttpResponse('OK')

    此时在浏览器器访问接口,我这边是本地启的服务:http://127.0.0.1:8000/study/orm ,页面会返回一个ok,查看数据库中的GmTool,如下图已成功新增

    方式二:

    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    from GmTool.models import Book
    
    
    def single_table(request):
    
        # ---------------------------------------------新增---------------------------------------------#
        
        # 方式二: create返回值就是当前生成的对象记录
        book_obj_two = Book.objects.create(username='biyuting', email='18232324544', password='19951030', register_date='2020-10-30', signature='hhh', num=200)
        return HttpResponse('OK')

    此时在浏览器器访问接口,http://127.0.0.1:8000/study/orm ,页面会返回一个ok,查看数据库中的GmTool,如下图已成功新增

    以上两种方法演示了新增数据的方法,接下来我们看下单标查询的一些常用接口

    Part3:单表查询

    models文件

    from django.db import models
    
    # Create your models here.
    
    
    class Book(models.Model):
        username = models.CharField(max_length=64, unique=True)
        email = models.EmailField()
        password = models.CharField(max_length=128)
        register_date = models.DateTimeField("注册日期", auto_now_add=True)
        signature = models.CharField(verbose_name="签名", max_length=128, blank=True, null=True)
        num = models.IntegerField(null=True)
    
        def __str__(self):
    
            return self.username

    表中的数据:

    1.all方法:将对象中的所有数据都取出来,以QuerySet的格式返回

    # (1) all方法
        book = Book.objects.all()  # 返回的是QuerySet对象   调用的是QuerySet对象
        print(book)
        for obj in book:  # 遍历可以每个对象中的属性
            print(obj.email)
    
        return HttpResponse('OK')

    执行结果:

    2.filter方法:过滤,以QuerySet的格式返回

    book = Book.objects.filter(username='leogao')  # 返回的是QuerySet对象 同样可以遍历哦 调用的是QuerySet对象
        print(book)
        return HttpResponse('OK')

    执行结果:

    3.first,last方法:去最后一个值或第一个值,返回的是module对象

    book = Book.objects.all().first()  # first出来的module可以直接去调对应的属性 last同理
        print(book)
        book = Book.objects.all().last()
        print(book)
        return HttpResponse('OK')

    执行结果:

    4.get 结果只能有且只有一个 返回的是module对象 调用的是QuerySet对象

    # (4) get 结果只能有且只有一个  返回的是module对象  调用的是QuerySet对象
        book = Book.objects.get(username='leogao')  # get出来的module可以直接去调对应的属性
        print(book.email)
        return HttpResponse('OK')

    执行结果:

    5.exclude() 过滤!= 调用queryset对象,返回一个queryset对象

    book = Book.objects.exclude(email='1823231344')
        print(book)
        return HttpResponse('OK')

    执行结果:

    6.order_by() 排序 ,调用queryset对象, 返回一个queryset对象

    book = Book.objects.all().order_by('id')  # id是正序,-id是倒序  同样可以遍历
        print(book)
        for obj in book:print(obj.email)
        return HttpResponse('OK')

    执行结果:

    7.reserve() 将排序倒转, 调用queryset对象, 返回一个queryset对象

    book = Book.objects.order_by('-id').reverse()
        print(book)
        return HttpResponse('OK')

    执行结果

    8.count() 计算queryset中对象的个数 调用queryset对象, 返回一个int

    book = Book.objects.all().count()
        print(book)
        return HttpResponse('OK')

    执行结果

    9.exist() 查看返回的querysert有没有值 调用queryset对象,返回布尔值

    book = Book.objects.all().exists()
        print(book)
        return HttpResponse('OK')

    执行结果

    10.values 获取对应字段的值   调用queryset对象, 返回一个queryset对象

    book = Book.objects.all().values('email', 'username')
        print(book)
        return HttpResponse('OK')

    执行结果

    11.values_list :将value的值放在一个元祖中  调用queryset对象, 返回一个queryset对象

    book = Book.objects.all().values_list('password', 'username')
        print(book)
        return HttpResponse('OK')

    执行结果

    12.distinct: 将重复的结果去重  调用queryset对象, 返回一个queryset对象 从返回结果中剔除重复结果

    book = Book.objects.all().values('email').distinct()
        print(book)
    
        return HttpResponse('OK')

    执行结果

    好了以上就是一些常用的单表查询 

    如果您觉得好请点赞 谢谢!

  • 相关阅读:
    java private修饰符的作用域
    debug运行下报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2(转)
    非线程安全的HashMap 和 线程安全的ConcurrentHashMap(转载)
    【Java集合源码剖析】HashMap源码剖析(转)
    eclipse 解决乱码问题
    java替换txt文本中的字符串
    tomcat startup.bat 启动脚本(转)
    tomcat 点击startup.bat一闪而过
    tomcat 目录文件夹作用(转)
    引脚复用
  • 原文地址:https://www.cnblogs.com/huizaia/p/14324474.html
Copyright © 2020-2023  润新知