初始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’)