# 元类
class Meta:
verbose_name='书籍信息表' # admin页面中标的名字
verbose_name_plural = verbose_name # 在admin页面中标的名字 复数形式
db_table = 'bookinfo' # 数据库表名
def __str__(self):
return self.name
2.字段类型
| 类型 | 说明 |
|---|---|
| BooleanField | 布尔字段,值为True或False |
| CharField | 字符串,参数max_length表示最大字符个数 |
| IntegerField | 整数 |
| FloatField | 浮点数 |
| DateField | 日期 |
| 选项 | 说明 |
|---|---|
| null | 如果为True,表示允许为空,默认值是False |
| blank | 如果为True,则该字段允许为空白,默认值是False |
| db_column | 字段的名称,如果未指定,则使用属性的名称 |
| db_index | 若值为True, 则在表中会为此字段创建索引,默认值是False |
| default | 默认 |
null是数据库范畴的概念,blank是表单验证范畴的
4.shell工具在python终端中输入,对数据进行增删改查
python manage.py shell
使用shell时,项目不要启动
5.增删改查在进行增删改查之前需要先导入模型类
from myapp.models import Bookinfo5.1增加
# 新增一个数据
# 方式1
Bookinfo.objects.create(
name='python',
pub_date='2022-02-22',
read_count=500,
comment_count=200,
)
# 方式2
book = Bookinfo(
name='python高级',
pub_date='2022-04-22',
read_count=200,
comment_count=100,
)
book.save()
5.2删除
# 删除 # 方式1 Bookinfo.objects.filter(name='python').delete() # 方式2 book = Bookinfo.objects.get(name='python高级') book.delete()5.3修改
# 修改 # 方式1 Bookinfo.objects.filter(name='python').update(sale_out=True) # 方式2 book = Bookinfo.objects.get(name='python高级') book.read_count = 222 book.save()5.4查询 5.4.1
# 查询 Bookinfo.objects.all() Bookinfo.objects.count() Bookinfo.objects.get(name='射雕英雄传') Bookinfo.objects.filter(name='射雕英雄传') # 查询编号为1的图书 Bookinfo.objects.filter(id=1) Bookinfo.objects.filter(id__exact=1) # 查询书名包含'湖'的图书 带i不区分大小写 Bookinfo.objects.filter(name__contains='湖') # 查询书名以'部'结尾的图书 Bookinfo.objects.filter(name__endswith='部') # 查询书名为空的图书 Bookinfo.objects.filter(name__isnull=True) # 查询编号为1或3或5的图书 Bookinfo.objects.filter(id__in=[1,3,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')5.4.2 F查询
F查询是字段和字段比较
先在shell中导入F模块
from django.db.models import F # 记得在shell里导入
from django.db.models import F # 记得在shell里导入
# 查询阅读量大于等于评论量的图书。
Bookinfo.objects.filter(read_count__gte=F('comment_count'))
# 查询阅读量大于2倍评论量的图书。
from django.db.models import F
Bookinfo.objects.filter(read_count__gt=F('comment_count')* 2)
5.4.3 Q查询
需要现在shell中导入Q模块
from django.db.models import Q 导入
# Q查询 # 查询阅读量大于20,并且编号小于3的图书。 # 方法1 Bookinfo.objects.filter(read_count__gt=20,id__lt=3) # 方法2 Bookinfo.objects.filter(read_count__gt=20).filter(id__lt=3) # 方法3 from django.db.models import Q Bookinfo.objects.filter(Q(read_count__gt=20) & Q(id__lt=3)) # 查询阅读量大于20,或编号小于3的图书。 from django.db.models import Q Bookinfo.objects.filter(Q(read_count__gt=20) | Q(id__lt=3)) # 查询编号不等于3的图书。 # 方法1 exclude是不包括的意思 Bookinfo.objects.exclude(id=3) # 方法2 from django.db.models import Q # ~代表相反 Bookinfo.objects.filter(~Q(id=3))5.4.4 聚合函数
导入需要使用的聚合函数
from django.db.models import Sum , Max , Min , Avg , Count
# 聚合函数
from django.db.models import Sum , Max , Min , Avg , Count
# 查询图书的总阅读量。
Bookinfo.objects.aggregate(Sum('read_count'))
# 查询图书总数。
# 1
Bookinfo.objects.count()
# 2
Bookinfo.objects.aggregate(Count('id'))
# 查询所有书籍信息平按照阅读量排序。
# 升序排序
Bookinfo.objects.all().order_by('read_count')
# 降序排序 在前面加个 - 号
Bookinfo.objects.all().order_by('-read_count')



