您现在的位置是:首页 > 数码 > 

python学习第6天

2025-07-26 16:01:41
python学习第6天 python学习第6天---django框架---模型类及数据库操作 目录 文章目录1、字段与选项2、查询函数、查询集4、模型类之间的关系4.1、对应关系4.2、关联查询5、模型管理器类5.1、简介5.2、自定义模型管理器类5.、应用场景5.4、实例6、元选项***后记*** : 内容 1、字段与选项   djang

python学习第6天

python学习第6天---django框架---模型类及数据库操作


目录

文章目录
    • 1、字段与选项
    • 2、查询函数
    • 、查询集
    • 4、模型类之间的关系
      • 4.1、对应关系
      • 4.2、关联查询
    • 5、模型管理器类
      • 5.1、简介
      • 5.2、自定义模型管理器类
      • 5.、应用场景
      • 5.4、实例
    • 6、元选项
    • ***后记*** :


内容

1、字段与选项

  django中字段属性对应数据库表中字段属性,参数对应表中字段约束。

  • 格式:

      name(字段名称) = models.Type(param, *ar, **keywords)
    
    • name:字段名称
    • Type: 为字段类型
      • param:参数,即为约束条件
  • 常用字段属性和参数表格说明1-1:

nameparam默认值说明
BooleanFieldFalse布尔字段,值为True或False
CharFieldmax_length=‘’字符串,参数max_length表示最大字符个数
TextField大文本字段,一般超过4000个字符时使用
IntegerFieldmax_length整数字段
DecimalFieldmax_digits=,decimal_places=十进制定点浮点数,max_digits为总位数,decimal_places为小数点后位数
DateFieldauto_now=,auto_now_addFalse日期字段,auto_now表示自动添加当前时间戳,auto_now_add表示修改时更新为当前时间戳,2个字段互斥,不能同时使用
  • 常用字段属性和参数表格说明1-2:
namedefaultdescription
defaultFalse默认值
db_indexFalse索引
db_column设置字段名称与表字段对应
nullFalse空值,数据库空值
blankFalse空,用于表单提交验证

2、查询函数

  • 常用查询函数表格2-1:
函数名功能返回值说明
get返回表中满足条件的一个且只能有一条数据一个模型类对象1)查到多条数据,抛MultipleObjectsReturned异常 2)查询不到数据,抛DoesotExist异常
all返回表中所有数据QuerySet结果集查询集
filter返回表中满足条件的数据QuerySet参数为查询条件
exclude不满足条件的数据QuerySet参数查询条件
order_by对结果进行排序QuerySet参数写根据那些字段排序
  • filter:

    • 条件格式: 模型类属性名__条件名=值

      • 示例:查询图书评论为4的图书信息

      • 代码2-1:

          In [5]: books = filter(comment_volume=4)In [6]: print(books)<QuerySet [<Book: Book object (1)>]>
        
    • 条件类型

      • 判等:exact,默认可以省略
      • 模糊查询:
        • contains:是否包含某个值

          • 示例:查询书名包含’传’的图书

          • 代码2-2:

              In []: books1 = filter(name__contains=	传	)In [5]: for book in books1:...:     print(book)...: 射雕英雄传
            
        • startswith:是否以…开头

        • endswith:是否以…结尾

      • 空查询:isnull
      • 范围查询:in
        • 示例:查询id为1或者的图书信息

        • 代码2-:

            In [2]: books2 = filter(id__in=[1,])In []: for book in books2:...:     print(book)...: 射雕英雄传笑傲江湖
          
  • order_by

    • 默认升序

      • 示例:查询所有图书信息,按照ID从小到大排序

      • 代码:

          In [2]: books1 = all().order_by(	id	)In []: for book in books1:...:     print(book)...: 1       射雕英雄传2       天龙八部       笑傲江湖4       雪山飞狐5       书剑恩仇录
        
    • 降序:既在排序字段前面加上‘-’

      • 示例:查询所有图书信息,按照ID从小到大排序

      • 代码:

          In [2]: books1 = all().order_by(	-id	)In []: for book in books1:...:     print(book)...: 5       书剑恩仇录4       雪山飞狐       笑傲江湖2       天龙八部1       射雕英雄传
        
  • F对象:用于类属性直接的比较

    • 示例:查询阅读量大于评论量的图书

    • 代码

        In [6]: books2 = filter(reading_volume__gt=F(	comment_volume	))In [7]: for book in books1:...:     print(	%s\t%s\t%s	 %(, book.reading_volume, bookment_volume))...: 雪山飞狐        58      24
      
  • Q对象:用于查询时条件之间的逻辑关系

    • 示例:查询id大于2且评论量大于0的图书

    • 代码:

        In [6]: books2 = filter(Q(id__gt=2)&Q(reading_volume__gt=0))In [7]: for book in books2:...:     print(	%s\t%s\t%s	 %(book.id, , book.reading_volume))...: 4       雪山飞狐        58
      
  • 聚合函数:查询结果为字典类型

    • max:最大值

      • 示例:查询评论量最大的图书

      • 代码:

          In [8]: book = aggregate(Max(	comment_volume	))In [11]: print(book){	comment_volume__max	: 80}
        
    • min:最小值

    • avg:平均值

    • sum:求和

    • count:数量

、查询集

  • 查询集特性:

    • 惰性查询:只有在实际使用查询集中数据的时候,才会对数据库进行查询
    • 缓存:当使用的是同一个查询集时,只有第一使用数据集中数据的时候,会进行数据库查询。当再次使用的时候,不在去数据库查询,直接使用缓存结果。
  • 限制查询集:

  可以对一个查询集进行取下标或者切片。进行切片操作会产生一个新的查询集,下标不允许为负数

4、模型类之间的关系

4.1、对应关系

&emps; 同表之间对应关系一样,模型类之间也有三种对应关系:

  • 一对一关系
      • 关系建立:models.OneToOneField(选项)设置任一模型类中
  • 一对多关系
    • 关系建立:models.ForeignKey(选项)设置在多类中
  • 多对多关系
    • 关系建立:models.ManyToManyField(选项)设置在任一模型类中
4.2、关联查询
  • 查询规则图示4.2-1:

    • 1:查询图书id为1的所有英雄信息

      • 代码:

          In [1]: heros1  = filter(book_id=1)In [14]: for hero in heros1:...:     print(	%s\t%s\t\%s	 %(hero.id, , hero.remark))...: 1       郭靖    \降龙十八掌2       黄蓉    \棍法       黄药师  \弹指神通4       欧阳锋  \蛤蟆功5       梅超风  \九阴白骨爪
        
    • 2:查询英雄id为1的所属图书信息

      • 代码:

          In [18]: book1 = get(hero__id=1)In [19]: print(	%s\t%s	 %(book1.id, ))1       射雕英雄传
        

5、模型管理器类

5.1、简介

  ,其中objects为django框架自动生成的管理器对象,通过这个管理器可以实现对数据的查询。

5.2、自定义模型管理器类
  1. 自定义管理器类需要继承models.Manager类
  2. 在在具体的模型类中定义一个自定义模型管理器对象
5.、应用场景
  1. 改变查询的结果集
  2. 添加额外的方法
5.4、实例
  • 需求1:我们想要查询所有图书室,只显示在售图书。
  • 需求2:我们想要一个api完成数据库中图书信息的添加
  • 代码5.4-1:
	from django.db import models# Create your models here.
class BookManager(models.Manager):图书管理器类# 1、改变查询结果集def all(self):			自定义all方法			books = super().all()books.filter(isDelete=False)return books# 2、封装函数:操作模型类对应的数据表def create_book(self, name):			向book表添加新图书			# book = Book()model_class = _ = namemodel_class.save()return model_classclass Book(models.Model):图书模型类# 图书名称name = models.CharField(max_length=20)# 出版日期publishing_date = models.DateField(auto_now_add=True)# 阅读量reading_volume = models.IntegerField(default=0)# 评论量comment_volume = models.IntegerField(default=0)# 删除标记isDelete = models.BooleanField(default=False)# 图书管理器对象objects = BookManager()class Meta:db_table = 	book_book	# def __str__(self):#     return str(self.id)  	\t	   Hero(models.Model):图书中英雄模型类# 英雄姓名name = models.CharField(max_length=20)# 性别gender = models.BooleanField(default=False)# 备注remark = models.CharField(max_length=2)# 删除标记isDelete = models.BooleanField(default=False)# 关联关系,一对多:多book = models.ForeignKey(Book, models.CASCADE)class Meta:db_table = 	book_hero	class Area(models.Model):地区模型类# 地区名称name = models.CharField(max_length=20)# 地区自关联,一对多parent = models.ForeignKey(	self	, models.CASCADE, null=True, blank=True)class Meta:db_table = 	book_area	
  • 测试
    create_book(‘神雕侠侣’)
    all()查询结果:

      In [4]: book1 = create_book(	神雕侠侣	)In [5]: books = all()In [6]: for book in books:...:     print(	%s\t%s\t%s	 %(book.id, , book.isDelete))...: 1       射雕英雄传      False2       天龙八部        False       笑傲江湖        False4       雪山飞狐        False5       书剑恩仇录      True6       神雕侠侣        False
    

6、元选项

  需要在模型类中定义一个元类Meta,在里面定义类属性db_table就可以指定表名,默认表名为应用名称_模型名。

  • 常用元选项:指定表名,源代码见上面5.4-1,指定表名,然后数据迁移之后,表名图示6-1:

后记

  本项目为参考某音python系列视频。上面为自己参考写的学习笔记,持续更新。欢迎交流,本人QQ:806797785

  1. 原视频地址:=.788.b_765f7570696e666f.1
  2. 笔记项目源代码地址:

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/857325.html

相关标签:无
上传时间: 2024-02-10 12:07:34
留言与评论(共有 7 条评论)
本站网友 福田公司
22分钟前 发表
实例 需求1:我们想要查询所有图书室,只显示在售图书
本站网友 爽身粉什么牌子好
19分钟前 发表
本站网友 厦门自助餐
1分钟前 发表
为字段类型 param
本站网友 手相看病
6分钟前 发表
print(book)...
本站网友 经期减肥
26分钟前 发表
进行切片操作会产生一个新的查询集,下标不允许为负数
本站网友 不断地
28分钟前 发表
print(book)...