django--ORM基础

本文介绍 Django ORM 的基本操作,包括模型定义、数据增删改查、条件过滤等,并演示了一对多关系的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做示例的数据库表


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 : 取消级联删除

 

转载于:https://www.cnblogs.com/duGD/p/11197849.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值