Day06-ORM字段及操作

1.模型类字段

1.1模型类字段及特殊属性

字段属性
BoolendField布尔类型,值为:True/False,默认为:None
CharField字符串类型,必须设置字符的最大长度max_length=None
IntegerField整型类型
DateField日期类型
DatetimeField日期时间类型
DecimalField十进制浮点数类型,必须写中位数max_digits和小数位数decimal_places
float浮点型

2.字段属性

2.1 字段通用属性

属性含义
null默认值为False,如果为True,则表示为空
blank默认值为Fslse,如果为True,则表示允许该字段值为空
choices分组
db_column如果没有指定,则使用属性名称
db_index默认值为:False,如果为True,则为该字段创建索引
default默认值
primary_key主键,每一张表里有且只有一个主键
unique如果为True,则表示这个值在表里是唯一存在的
verbose_name对于一个字段更高的可读性名称

3.模型类元选项

3.1 模型元选项

在模型类里创建模型元选项

class Bookinfo(models.Model):
    name = models.CharField(max_length=20,verbose_name='书名')
    pub_date = models.DateField(null=True,verbose_name='发布日期')
    read_count = models.IntegerField(default=0,verbose_name='阅读量')
    comment_count = models.IntegerField(default=0,verbose_name='评论量')
    sale_out = models.BooleanField(default=False,verbose_name='售空')
#模型元选项
    class Meta:
        verbose_name = '书籍信息表'
        verbose_name_plural = verbose_name  #admin表的名字
        db_table = 'bookinfo'  #在数据库里表名
        
	def __str__(self):  #直接输出对象时,输出对象的名字
        return self.name

元选项的含义

元选项含义
abstract抽象基类,不会创建真的表
app_label描述是哪一个应用
db_table应用名加模型类名是真正的表明
ordering排序。“-”是倒序,“ ?”是随机排序
verbose_name设置表的名称,为单数
verbose_name_plural表的名称,为复数

4.shell工具

在终端运行命令,测试sql语句

在views.py里设置
from books.models import Bookinfo
book = Bookinfo.objects.get(id=1)
在终端运行
python manage.py shell

5.增删改查

5.1 增加数据

create增加
直接在终端运行
Bookinfo.objects.create(
    name = 'python高级',
    pub_date = '2022-02-02',
    read_count = 500,
    comment_count=200,
)
save增加
先在views.py里写上代码
book = BookInfo(
    name='python',
    pub_date='2020-11-11',
    read_count=200,
    comment_count=100,
    sale_out=False,
)
book.save()
再在终端里运行
book.save()

5.2 删除数据

.filter().delete()
直接在终端运行
Bookinfo.objects.filter(name='python').delete()
delete()
先在views.py里写上代码
book = Bookinfo.objects.get(name='python高级')
再在终端里运行
book.delete()

5.3 修改数据

update修改
直接在终端运行
Bookinfo.objects.filter(name='python高级').update(sale_out = True)
get+save()
先在views.py里写上代码
book = Bookinfo.objects.get(name='python')  # 获取对象
book.read_count = 300  # 修改属性值
book.save()  # 保存生效
再在终端里运行
book.save()

5.4 查找数据

简单的查询

直接用filter过滤出结果或用get直接查找,不过get针对的是一条数据的查找。all这是查询全部内容比如:

# 查询编号为2的图书
Bookinfo.objects.get(id=2)
# 查询书名包含'湖'的图书
 book = Bookinfo.objects.filter(name__contains='湖')
# 查询书名以'部'结尾的图书
book= Bookinfo.objects.filter(name__endswith='部')
# 查询书名为空的图书
book=Bookinfo.objects.filter(name__isnull=True)

在这里插入图片描述

多条件查询
# 查询编号为1或3或5的图书
Bookinfo.objects.filter(id__in=[2,4,5])
# 查询编号大于3的图书
# gt >   gte >=   lt < lte <=
Bookinfo.objects.filter(id__gt=3)
# 查询1980年发表的图书
Bookinfo.objects.filter(pub_date__year=1980)
# 查询1990年1月1日后发表的图书
Bookinfo.objects.filter(pub_date__gt='1990-01-01')

在这里插入图片描述

属性 VS 属性

需要先导入F模块

# 查询阅读量大于等于评论量的图书。
# F 查询字段和字段比较
from django.db.models import F
Bookinfo.objects.filter(read_count__gte=F('comment_count'))
# 查询阅读量大于2倍评论量的图书。
Bookinfo.objects.filter(read_count__gte=F('comment_count')*2)

在这里插入图片描述

逻辑查找

导入Q模块

# 查询阅读量大于20,并且编号小于3的图书。
from django.db.models import Q
Bookinfo.objects.filter(read_count__gt=20,id__lt=3)
Bookinfo.objects.filter(read_count__gt=20).filter(id__lt=3)
Bookinfo.objects.filter(Q(read_count__gt=20) & Q(id__lt=3))
# 查询阅读量大于20,或编号小于3的图书。
Bookinfo.objects.filter(Q(read_count__gt=20) | Q(id__lt=3))
# 查询编号不等于3的图书。
Bookinfo.objects.exclude(id=3)
Bookinfo.objects.filter(~Q(id=3))

在这里插入图片描述

聚合函数

导入聚合函数模块

# 查询图书的总阅读量。
from django.db.models import Sum,Max,Min,Avg,Count
Bookinfo.objects.aggregate(Sum('read_count'))
# 查询图书总数。
Bookinfo.objects.count()
Bookinfo.objects.aggregate(Count('id'))
# 查询所有书籍信息平按照阅读量排序。
Bookinfo.objects.all().order_by('read_count')
Bookinfo.objects.all().order_by('-read_count')

在这里插入图片描述

总结

错误
在这里插入图片描述
在这里插入图片描述
解决方法
忘记导入模块
在这里插入图片描述
代码一个字母写错了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值