• Django模型层


    模型层

    与数据库相关的,用于定义数据模型和数据库表结构。 在Django应用程序中,模型层是数据库和应用程序之间的接口,它负责处理所有与数据库相关的操作,例如创建、读取、更新和删除记录。Django的模型层还提供了一些高级功能

    首先准备工作:切换mysql数据库

    1. DATABASES = {
    2. 'default': {
    3. # 'ENGINE': 'django.db.backends.sqlite3',
    4. 'ENGINE': 'django.db.backends.mysql',
    5. 'NAME': 'db2',
    6. 'USER': 'root',
    7. 'PASSWORD': '12345',
    8. 'HOST': '127.0.0.1',
    9. 'PORT': 3306,
    10. 'CHARSET': 'utf8'
    11. }

    测试脚本

    接下来我们可以使用测试脚本来直接运行,注意后面的Django代码必须写在测试脚本下面

    1. 把测试脚本放进一个py文件即可
    2. import os
    3. import sys
    4. import django
    5. if __name__ == "__main__":
    6. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名称.settings")
    7. import django
    8. django.setup()
    9. django.setup()
    10. from app01 import models

    常用的关键字

    create描述
    filter创建数据并直接获取当前创建的数据对象
    first/last根据条件筛选数据 结果是QuerySet [数据对象1,数据对象2]
    update拿queryset里面第一个元素/拿queryset里面最后一个元素
    delete删除数据(批量删除)
    all查询所有数据 结果是QuerySet [数据对象1,数据对象2]
    values根据指定字段获取数据 结果是QuerySet [{}},{},{},{}]
    values_list根据指定字段获取数据 结果是QuerySet [(),(),(),()]
    distinct去重 数据一定要一模一样才可以 如果有主键肯定不行
    order_by根据指定条件排序 默认是升序 字段前面加负号就是降序
    get根据条件筛选数据并直接获取到数据对象 一旦条件不存在会直接报错 不建议使用
    exclude取反操作
    reverse颠倒顺序(被操作的对象必须是已经排过序的才可以)
    count统计结果集中数据的个数
    exists

    判断结果集中是否含有数据 如果有则返回True 没有则返回False

    示例

    如果使用get,建议加上try

    1. if __name__ == "__main__":
    2. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject.settings")
    3. import django
    4. django.setup()
    5. from app01 import models
    6. try:
    7. res = models.Userinfo.objects.filter(pk=1).get()
    8. except Exception as f:
    9. print(f)

    value与value_list

    1. res = models.Userinfo.objects.values('id', 'username', 'password')
    2. for i in res:
    3. print(i.get('id')) #
    4. # 1 2 3 索引0为id,1为username
    5. print(res) #

    查看内部sql语句

    只有返回的结果是queryset对时才能用query查看

    1. res = models.Userinfo.objects.values('id', 'username', 'password')
    2. for i in res:
    3. print(i.get('id'))
    4. print(res.query)
    5. """SELECT `app01_userinfo`.`id`, `app01_userinfo`.`username`, `app01_userinfo`.`password` FROM `app01_userinfo`"""

    distinct 去重

    1. res = models.Userinfo.objects.all().values('password').distinct()
    2. print(res)

    order_by 排序

    1. res1 = models.Userinfo.objects.all().order_by('username') # , , ]
    2. print(res1)
    3. """默认升序"""

    基于双下划线的查询

    查询年龄大于xx

    1. """查看年龄大于或小于32的数据"""
    2. res = models.Userinfo.objects.filter(age__gt=32)\(age__lt=32)
    3. print(res)
    4. """查看大于等于或小于等于32的数据"""
    5. res = models.Userinfo.objects.filter(age__gte=32)\(age__lte=32)
    6. print(res)
    7. """查看18-32之间的数据,收尾都要"""
    8. res = models.Userinfo.objects.filter(age__range=[18, 32])
    9. print(res)
    10. """查看带s字段的数据"""
    11. res = models.Userinfo.objects.filter(username__contains='s')
    12. print(res) # ]>
    13. """姓名以c开头或结尾startwith\endwith"""
    14. res = models.Userinfo.objects.filter(username__startswith='c')
    15. print(res)
    16. """查看注册时间
    17. 两个参数
    18. auto_now = false 当我们更新数据时,只要更新就会更新时间
    19. auto_add = False 当auto_add=True时,添加数据时会自动添加当前时间
    20. """
    21. register_time = models.DateTimeField(auto_now=True, auto_now_add=True)

  • 相关阅读:
    使用docker部署mysql8.0+zabbix5.0
    Gitlab分支策略建议指南
    postman测试文件上传接口教程
    Websocket集群解决方案
    c语言:解决数组元素右旋问题,时间复杂度O(N)
    Python+Yolov8路面桥梁墙体裂缝识别
    Vue 自定义组件中 v-model 的使用
    上周热点回顾(4.4-4.10)
    Helix QAC更新至2022.1版本,将持续提供高标准合规覆盖率
    MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计
  • 原文地址:https://blog.csdn.net/weixin_49210718/article/details/134428625