zoukankan      html  css  js  c++  java
  • django--ORM基础

    做示例的数据库表

    
    
    from django.db import models

    #
    Create your models here. class User(models.Model): name=models.CharField(max_length=32,null=True) age=models.IntegerField() info=models.ForeignKey('Userinfo',null=True ) class Userinfo(models.Model): title=models.CharField(max_length=32)

    在models中创建类完成后在cmd的项目文件夹下或者pycharm中的terminal框中输入

    python manage.py makemigrations  生成migrations文件
    python manage.py migrate     根据生成的migrations文件生成表

    基础操作

    def task(request):
        增加信息
        models.Userinfo.objects.create(title='level1')
    单表查询
        res=models.Userinfo.objects.all()
        print(res)
        .all()查询所有以列表包裹对象的形式返回
        ==》<QuerySet [<Userinfo: Userinfo object>, <Userinfo: Userinfo object>, <Userinfo: Userinfo object>, <Userinfo: Userinfo object>]>
        for obj in res:
            print(obj.title)
        循环遍历得到每个对象,可以直接点出信息
    
        查询一个
        obj=models.Userinfo.objects.first()
        print(obj,obj.title)
        ==》Userinfo object level2
        .first()可以直接获得一个对象
    
        过滤
        res=models.Userinfo.objects.filter(id=2)
        print(res)
        ==》<QuerySet [<Userinfo: Userinfo object>]>
        得到的同样是列表套对象
        res=models.Userinfo.objects.filter(id__gt=3)#__gt(greater than)对对象属性大于某个值的对象进行筛选
        print(res)
        ==》<QuerySet [<Userinfo: Userinfo object>, <Userinfo: Userinfo object>]>
        相同的用法还有__lt(小于)__lte(小于等于)__gte(大于等于)
    
        查询表中某一列的值
        res=models.Userinfo.objects.values('title').all()
        print(res)
        ==》<QuerySet [{'title': 'level2'}, {'title': 'level3'}, {'title': 'level1'}, {'title': 'level1'}]>
        得到的是列表套字典格式的目标列和对应值
        res = models.Userinfo.objects.values_list('title').all()
        print(res)
        ==》<QuerySet [('level2',), ('level3',), ('level1',), ('level1',)]>
        如果用.values_list方法的话会获得列表套元组格式的数据,元组内为对应列的值
    
    一对多
        查询所有
        res=models.Userinfo.objects.all()
        查询一个
        res=models.Userinfo.objects.first()
        正向查询
        res=models.Userinfo.objects.filter(title='level3').all()
        res=models.Userinfo.objects.all()
        和上面一样得到列表套对象格式的返回值都可以通过遍历拿到对象点出
        反向查询
        查询所有等级为level1的人
        res= models.Userinfo.objects.all()
        for obj in res:
            print(obj.id)
            ==》2
            print(obj.title)
            ==》level2
            print(obj.user_set.all())
            ==》<QuerySet [<User: User object>]>
            使用_set的方法可以反向查询外键关联的表查询得到列表套对象的格式
        重点之__
        res= models.User.objects.values('info__title')
        print(res)
        ==》<QuerySet [{'info__title': 'level2'}, {'info__title': 'level3'}]>
        在查询User表的时候通过__加上Userinfo中的列名可以直接查询到Userinfo表中的数据
    
        return HttpResponse('ok')

     在一对多表中如果删除了外键的数据那么所有关联此条数据的行都会被删除,这是django中的级联删除机制

    ut = models.ForeignKey("UserType", null=True, on_delete=models.CASCADE)
    CASCADE: 设置级联删除
    SET_NULL : 取消级联删除
  • 相关阅读:
    音频处理之回声消除及调试经验
    音频软件开发中的debug方法和工具
    ZJOI2015地震后的幻想乡
    HEOI2015小L的白日梦
    THUWC2017随机二分图
    PKUWC Slay The Spire
    dp的一些计划
    鸡汤征集贴
    弱菜的各种模板
    洛谷P4902乘积
  • 原文地址:https://www.cnblogs.com/duGD/p/11197849.html
Copyright © 2011-2022 走看看