0
点赞
收藏
分享

微信扫一扫

初始ORM

紫荆峰 2022-04-27 阅读 40
django

初始ORM

模型类字段

BooleanField
True/False 字段,默认值为 None
CharField
字符串字段
CharField(max_length=None)
max_length 设置最大的字符数长度限制
DateField
日期字段
DatetimeField
表示日期和时间
DecimalField
十进制浮点数类型
FloatField
浮点数
IntegerField
一个整数,范围由-2147483648到2147483647

字段属性

null:使字符串代表空值为空
blank:为表单验证层面可以填写空值
choices:一个二元组的列表或元组
db_column:数据库中用来表示该字段的名称,如果未指定,那么 Django 将会使用Field名作为字段名
db_index
当该值为True时,为该字段创建索引
default
该字段默认值,可以是一个值或是一个回调函数
当是一个函数对象时,在创建新对象时,函数调用
primary_key:主键一个模型类同时只能有一个主键
unique
如果该值为True,代表这个数据在当前的表中有唯一值
verbose_nae:在后台看到的名字

模型类元选项

    class Meta:
        verbose_name = '书籍信息表'
        verbose_name_plural = verbose_name
        db_table = 'bookinfo'

abstract
代表当前模型类为抽象基类,不会创建真正的数据表,只是为了其他模型类继承使用
app_label
当模型类被定义在了其他 app 下,这个属性用来描述当前表属于哪个 app 应用
db_table
这个代表数据库的名字
ordering
当前表中的数据存储时的排序规则,这是一个字段名的字符串,可以是一个列表或元组;

verbose_name
一般设置该表展示时所用的名称,名称被自动处理为复数,字符串后加一个"s"

ORM增删改查

方法含义
.all获取一个表里所有数据
.filter返回一个包含数据对象的集合满足参数中所给的条件
.exclude返回一个包含数据对象的集合数据为不满足参数中所给的条件
.get获取一条数据
.order_by对查询的结果排序
.count返回数据库中对呀字段的个数
.values返回一个查询集结果但是迭代访问返回的是字典不是数据实例对象
.contains大小写敏感的匹配查询也是like注意转换后的查询条件的两侧有%
.icontains大小写不敏感的匹配查询
.range在某个范围进行查询
.in查询条件是否在给定的范围内用小括号和中括号都可以
.exact查询必须完全一样的内容
.iexact忽略大小写的匹配
.startwitch,endswitch匹配开头和结尾,区分大小写
.gte大于或等于
.lte小于或等于

一些练习题:
#新增一条数据
#方式1
Bookinfo.objects.create(
name=‘python’,
pub_data=‘2022-4-27’,
read_count=500,
comment_count=200,
)
#方式2
book = Bookinfo(
name=‘python高级’,
pub_data=‘2022-8-27’,
read_count=300,
comment_count=300,
)
book.save()

#修改数据
#方式1
Bookinfo.objects.filter(name=‘python’).update(sale_out=True)
#方式2
book = Bookinfo.objects.get(name=‘python高级’)
book.read_count=333
book.save()

#删除
#方式1
Bookinfo.objects.filter(name=‘python’).delete()
#方式2
book = Bookinfo.objects.get(name=‘python高级’)
book.delete()

#查询所有数据
Bookinfo.objects.all()
#查询有几条数据
Bookinfo.objects.count()
查询编号为1的图书
Bookinfo.objects.get(id__exact=1)
#查询书名包含’湖’的图书
Bookinfo.objects.filter(name__contains=‘湖’) #contains包含
#查询书名以’部’结尾的图书
Bookinfo.objects.filter(name__endswith=“部”) #endswitch结尾
#查询书名为空的图书
Bookinfo.objects.filter(name__isnull=True) #isnull为空
#查询编号为1或3或5的图书
Bookinfo.objects.filter(id__in = [1,3,5])
#查询编号大于3的图书
Bookinfo.objects.filter(id__gt=3) #ge 大于 gte 大于等于 lt小于 lte小于等于
#查询1980年发表的图书
Bookinfo.objects.filter(pub_data__year=1980)
查询1990年1月1日后发表的图书
Bookinfo.objects.filter(pub_data__gt=‘1990-1-1’)

#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
Bookinfo.objects.aggregate(Sum(‘read_count’))
#查询图书总数。

查询所有书籍信息平按照阅读量排序。
Bookinfo.objects.all().order_by(‘read_count’)
#降序排序
Bookinfo.objects.all().order_by(‘-read_count’)

举报

相关推荐

0 条评论