一、常用和非常用字段和参数
# 常用字段 -IntegerField 整数 -AutoField -BooleanField -CharField -DateField -DateTimeField -DecimalField -FileField 上传文件,本质是varchar -ImageField 图片,本质是varchar,继承了FileField -TextField 存大文本 -EmailField 本质是varchar # 非常用字段 -BigAutoField -SmallIntegerField -PositiveSmallIntegerField -PositiveIntegerField -BigIntegerField 'AutoField': 'integer AUTO_INCREMENT', 'BigAutoField': 'bigint AUTO_INCREMENT', 'BinaryField': 'longblob', 'BooleanField': 'bool', 'CharField': 'varchar(%(max_length)s)', 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 'DateField': 'date', 'DateTimeField': 'datetime', 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 'DurationField': 'bigint', 'FileField': 'varchar(%(max_length)s)', 'FilePathField': 'varchar(%(max_length)s)', 'FloatField': 'double precision', 'IntegerField': 'integer', 'BigIntegerField': 'bigint', 'IPAddressField': 'char(15)', 'GenericIPAddressField': 'char(39)', 'NullBooleanField': 'bool', 'OneToOneField': 'integer', 'PositiveIntegerField': 'integer UNSIGNED', 'PositiveSmallIntegerField': 'smallint UNSIGNED', 'SlugField': 'varchar(%(max_length)s)', 'SmallIntegerField': 'smallint', 'TextField': 'longtext', 'TimeField': 'time', 'UUIDField': 'char(32)', # 常用参数 -null -max_length -default -primary_key -unique -db_index # -choices:比较常用(后面再说) -blank: django admin里提交数据,限制 # 元数据 -必须记住的 class Meta: # 表名 db_table = "book" #联合索引 index_together = [ ("name", "publish"), ] # 联合唯一索引 unique_together = (("name", "publish"),) -了解 # admin中显示的表名称 verbose_name='图书表' #verbose_name加s verbose_name_plural='图书表'
二、查询表记录API
<1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> order_by(*field): 对查询结果排序('-id') <6> reverse(): 对查询结果反向排序 <8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。 <9> first(): 返回第一条记录 <10> last(): 返回最后一条记录 <11> exists(): 如果QuerySet包含数据,就返回True,否则返回False <12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
model的实例化对象,而是一个可迭代的字典序列 <13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <14> distinct(): 从返回结果中剔除重复纪录
三、
gt: greater than 大于
gte: greater than or equal 大于等于
lt: less than 小于
lte: less than or equal 小于等于
#1 价格在[100,200,300]这三个数字范围内 注意与range区别 Book.objects.filter(price__in=[100,200,300]) # 2 大于,小于,大于等于,小于等于 Book.objects.filter(price__gt=100) #gt 大于 Book.objects.filter(price__lt=100) #lt 小于 Book.objects.filter(price__gte=100) #gte 大于等于 Book.objects.filter(price__lte=100) #lte小于等于 # 3 范围 Book.objects.filter(price__range=[100,200]) # 包含 Book.objects.filter(title__contains="python") # 4 忽略大小写包含 Book.objects.filter(title__icontains="python") # 5 以xx开头 Book.objects.filter(title__startswith="py") # 6 时间类型,年份是2012年的 Book.objects.filter(pub_date__year=2012) # 基于双下滑线的模糊查询 # 1 in条件 # res=models.Book.objects.filter(name__in=['西游记', '金梅']) # print(res) # 2 大于,小于,大于等于,小于等于 # res=models.Book.objects.filter(id__gt=2) # res=models.Book.objects.filter(id__lt=2) # res=models.Book.objects.filter(id__gte=2) # res=models.Book.objects.filter(id__lte=2) # print(res) # 3 rang 范围 BETWEEN 1 AND 3 表示id范围是1,2,3 注意与in区别 # res=models.Book.objects.filter(id__range=[1,3]) # print(res) # 包含 # res=models.Book.objects.filter(name__contains="金") # print(res) # 忽略大小写的包含 # res=models.Book.objects.filter(name__icontains="金") # print(res) # # res=models.Book.objects.filter(name__startswith="金") # print(res) # res = models.Book.objects.filter(name__endswith='梅') # print(res) # # res=models.Book.objects.filter(publish_date__year='2020') # res=models.Book.objects.filter(publish_date__month='9') # print(res)
四、
# 删除的两种方式 # 第一种:queryset的delete方法 # res=models.Book.objects.all().delete() # print(res) # 第二种:对象自己的delete方法 # book = models.Book.objects.all().filter(name='金梅').first() # print(type(book)) # res=book.delete()
五、修改表记录
#修改记录 # 第一种:queryset的update方法 # res=models.Book.objects.filter(publish='东京').update(name='金梅1') # print(res) # 第二种:对象自己的 book = models.Book.objects.filter(name='xxx').last() book.name='asdfasd' book.save()