BooleanField
True/False 字段,默认值为 None
表单类型:**CheckboxInput**,``
CharField(字符串字段)
CharField(max_length=None)
# max_length 设置最大的字符数长度限制
DateField(日期类型)
DatetimeField(日期和时间)
DateField(auto_now=False, auto_now_add=False,**options)
'''
auto_now: 该值为 True 时,每次在保存数据对象时,自动设置该字段为当前时间,也可以理解为自动更新最后一次修改时间
auto_now_add: 该值为 True 时,该字段设置在第一次数据对象创建时,可以记录当前字段创建的时间值
`auto_now`,`auto_now_add`,`default`不能同时出现
'''
DecimalField(以Decimal实例表示的十进制浮点数类型)
max_digits: 位数总数,包括小数点后的位数,必须大于 decimal_places 参数
decimal_places: 小数点后的数字数量,精度
FloatField(浮点类型)
IntegerField(整形)
字段属性null:如果该值为`True`,将在数据库中将控制存储为`NULL`
blank:如果该值为`True`,则在验证时该字段值可以为空;
choices:元组中第一个值为真正在数据库中存储的值,第二个值为该选项的描述
db_column:数据库中用来表示该字段的名称,如果未指定,那么 Django 将会使用`Field`名作为字段名
db_index:当该值为`True`时,为该字段创建索引
default:该字段默认值,可以是一个值或是一个回调函数
primary_key:主键
unique:唯一
verbose_name:字段的名字
模型元选项
class TestTable(models.Model):
…
class Meta:
ordering = [Fields]
…
abstract:代表当前模型类为抽象基类,不会创建真正的数据表,只是为了其他模型类继承使用
app_label:当模型类被定义在了其他 app 下,这个属性用来描述当前表属于哪个 app 应用
db_table:当前模型类所对应的表名,未设置时,django 默认将表名与 app 名由下划线组成,作为表名
ordering:当前表中的数据存储时的排序规则,这是一个字段名的字符串,可以是一个列表或元组;
verbose_name:一般设置该表展示时所用的名称,名称被自动处理为复数,字符串后加一个"s"
verbose_name_plural:与`verbose_name`功能相同,但是不会自动在字符串后加"`s`"以表复数
ORM的增删改查
django 自带了一个数据库测试的 shell 工具,这是一个非常方便可以让我们对 django 代码进行测试的环境
可以直接通过`python manage.py shell`命令行管理工具来打开
链式过滤条件
contains:大小写敏感的匹配查询,也是 like,注意转换后查询条件的两侧都有%
icontains:大小写不敏感的匹配查询
range:在某个范围内进行查询Person.objects.filter(id_range=(1,6))
in:查询条件是否在给定的范围内,用小括号和中括号都可以
exact:查找完全一致的内容
iexact:忽略大小写
startswith、endswith:分别匹配开头和结尾,区分大小写
istartswith、iendswith:分别匹配开头和结尾,忽略大小写
gte:大于或等于
lte:小于或等于
实例
# 新增一条数据
Bookinfo.objects.create(
name='python',
pub_date='2022-02-22',
read_count=500,
comment_count=200,
)
# 方法2
book = Bookinfo(
name='python高级',
pub_date='2022-02-22',
read_count=500,
comment_count=200,
)
book.save()
# 修改
# 方式1
Bookinfo.objects.filter(name='python').update(sale_out=True)
# 方式2
book = Bookinfo.objects.get(name='python高级')
book.read_count = 222
book.save()
# 删除
# 方式1
Bookinfo.objects.filter(name='python').delete()
# 方式2
book = Bookinfo.objects.get(name='python高级')
book.delete()
# 查询所以数据
Bookinfo.objects.all()
# 查询数据数量
Bookinfo.objects.count()
# 获取到准确的一条数据
Bookinfo.objects.get(name='射雕英雄传')
# 过滤出符合要求的所有数据
Bookinfo.objects.filter(name='射雕英雄传')
# 查询
# 查询编号为1的图书
Bookinfo.objects.get(id=1)
# 完整
Bookinfo.objects.get(id__exact=1)
# 查询书名包含'湖'的图书
# contains 包含
Bookinfo.objects.filter(name__contains='湖')
# 查询书名以'部'结尾的图书
# endswith 结尾
Bookinfo.objects.filter(name__endswith='部')
# 查询书名为空的图书
Bookinfo.objects.filter(name__isnull=True)
# 查询编号为1或3或5的图书
Bookinfo.objects.filter(id__in=[1,3,5])
# 查询编号大于3的图书
Bookinfo.objects.filter(id__gt=3)
# 查询1980年发表的图书
Bookinfo.objects.filter(pub_date__year=1980)
# 查询1990年1月1日后发表的图书
Bookinfo.objects.filter(pub_date__gte='1990-01-01')
# F查询和Q查询
# 字段与字段比较使用
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条)