当前位置: 首页 > news >正文

如何设计的英文网站青岛黄岛网站建设

如何设计的英文网站,青岛黄岛网站建设,wordpress毕设,长沙小升初有什么做试卷的网站文章目录一、查询基础QuerySet 详解一对多关联查询多对多关联查询二、N1查询问题问题分析检测方法解决方案三、高级查询优化values()values_list()values()和values_list()对比Q() 对象复杂查询查看生成的 SQL四、项目实战场景实战一、查询基础 QuerySet 详解 Django 中通过模… 文章目录一、查询基础QuerySet 详解一对多关联查询多对多关联查询二、N1查询问题问题分析检测方法解决方案三、高级查询优化values()values_list()values()和values_list()对比Q() 对象复杂查询查看生成的 SQL四、项目实战场景实战一、查询基础 QuerySet 详解 Django 中通过模型类的 Manager 构建 QuerySet 来检索数据库对象其核心特性包括 代表数据库中对象的集合可通过过滤器缩小查询范围具有惰性执行特性仅在需要结果时才执行 SQL 常用过滤器 all()返回所有对象filter(**kwargs)返回满足条件的对象exclude(** kwargs)返回不满足条件的对象get(**kwargs)返回单个匹配对象无匹配或多匹配会抛异常切片 # 切片操作示例返回前5个对象LIMIT 5 Book.objects.all()[:5]一对多关联查询 假设一个作者可以写多本书但每本书只能属于一个作者。 from django.db import modelsclass Author(models.Model):first_name models.CharField(max_length100)last_name models.CharField(max_length100)def __str__(self):return f{self.first_name} {self.last_name}class Book(models.Model):title models.CharField(max_length100)publication_date models.DateField()# 外键关联Author级联删除反向查询名为booksauthor models.ForeignKey(Author, on_deletemodels.CASCADE, related_namebooks)def __str__(self):return self.title正向查询通过外键属性访问 b Book.objects.get(id2) b.author # 获取关联的Blog对象查询数据库 b.author some_body # 设置关联对象 b.save() # 保存更改使用 select_related() 预加载关联对象避免额外查询 b Book.objects.select_related().get(id2) print(b.author) # 已预加载到缓存使用缓存不查询数据库反向查询通过关联管理器 # 未定义related_name 默认Manager名称为模型名称小写_set a Author.objects.get(id1) a.book_set.all() # 返回所有关联的Book# 定义了related_namebooks a.books.all() # 更直观的访问方式关联对象操作方法如下。所有 “反向” 操作对数据库都是立刻生效保存到数据库。 add(obj1, obj2)添加关联对象create(**kwargs)创建并关联新对象remove(obj1, obj2)移除关联对象clear()清空所有关联set(objs)替换关联集合 a Author.objects.get(id1) a.books.set([b1, b2]) # b1 和 b2 都是 Book 实例多对多关联查询 假设一个作者可以写多本书一本书也可以有多个作者。 from django.db import modelsclass Author(models.Model):name models.CharField(max_length100)email models.EmailField()def __str__(self):return self.nameclass Book(models.Model):title models.CharField(max_length200)publication_date models.DateField()# 多对多关联Authorauthors models.ManyToManyField(Author, related_namebooks)def __str__(self):return self.title正向与反向查询示例 # 正向查询 b Book.objects.get(id3) b.authors.all() # 获取所有关联的Author b.authors.count() b.authors.filter(name__contains张三)# 反向查询 a Author.objects.get(id5) a.book_set.all() # 获取所有关联的Book多对多关联中add()、set() 和 remove() 可直接使用主键 a Author.objects.get(id5) a.book_set.set([b1, b2]) # 等价于 a.book_set.set([b1.pk, b2.pk])二、N1查询问题 问题分析 N1 查询是常见的性能问题表现为主查询后执行 N 次额外查询。例如 books Book.objects.all() for book in books:print(book.author.first_name)以上代码会产生 1 次查询获取所有 Book加上 N 次查询获取对应的 AuthorN 为 Book 数量共 N1 次查询。 检测方法 Django Debug Toolbar直观显示请求中的 SQL 查询日志记录配置日志记录 SQL 语句性能分析工具如 Django Silk 分析查询性能 解决方案 方法 1使用 select_related 适用于一对多正向和一对一关系通过 SQL JOIN 预加载关联对象 语法select_related(related_field)related_field 是模型中定义的 ForeignKey 或 OneToOneField 字段 books Book.objects.select_related(author).all() for book in books:print(book.author.first_name) # 无额外查询 可结合 only() 选择需要的字段 books Book.objects.select_related(author).only(title, author__name)支持多级关联 # 加载书籍、作者及作者家乡信息 books Book.objects.select_related(author__hometown).all() for book in books:print(book.author.hometown.name) # 无额外查询方法 2使用 prefetch_related 适用于多对多和反向关系通过批量查询后在 Python 中关联。适用场景 多对多关系ManyToManyField反向一对多关系反向一对一关系 books Book.objects.prefetch_related(authors).all() for book in books:print(book.authors.all()) # 无额外查询参考资料Django 数据库访问优化 三、高级查询优化 values() 返回字典形式的查询集返回一个 ValuesQuerySet 对象其中每个元素是一个字典适合提取特定字段 books Book.objects.values(title, author) for book in books:print(book) # 输出示例 {title: Book1, author: Author1} {title: Book2, author: Author2}values_list() 返回元组形式的查询集返回一个 ValuesListQuerySet 对象其中每个元素是一个元组内存占用更低 books Book.objects.values_list(title, author) for book in books:print(book)### 输出示例 (Book1, Author1) (Book2, Author2)使用 flatTrue 获取单一字段值列表。如果有多个字段时传入 flat 会报错。 titles Book.objects.values_list(title, flatTrue) # QuerySet [红楼梦, 西游记, ...]使用 namedTrue 结果返回 namedtuple() books_info Book.objects.values_list(id, title, namedTrue) # QuerySet [Row(id1, title红楼梦), ...]values()和values_list()对比 对比维度values()values_list()返回值类型返回一个包含字典的查询集字典的键为字段名值为字段对应的数据返回一个包含元组的查询集元组中的元素依次对应指定字段的值内存占用相对较高因为字典需要存储键值对信息通常更节省内存元组是更轻量的数据结构无需存储字段名使用场景适合需要通过字段名访问字段值的场景例如需要明确知道每个值对应的字段时适合仅需要获取字段值的场景例如只需批量获取某个或某几个字段的具体数据时 Q() 对象复杂查询 Q() 对象用于构建复杂查询条件支持逻辑运算 逻辑与AND|逻辑或OR~逻辑非NOT from django.db.models import Q# 标题含Python或作者为John的书籍 books Book.objects.filter(Q(title__icontainsPython) | Q(authorJohn) )# 复杂组合条件 books Book.objects.filter((Q(title__icontainsPython) | Q(title__icontainsDjango)) ~Q(authorJohn) )查看生成的 SQL 调试时可查看 QuerySet 生成的 SQL queryset Book.objects.filter(authorJohn) print(queryset.query) # 输出对应的SQL语句四、项目实战 场景 DjangoVue 后台管理系统中一般需要支持不同的数据权限 仅本人数据权限本部门及以下数据权限本部门数据权限指定部门数据权限全部数据权限 数据权限与功能权限基于RBAC实现的区别 功能权限控制 “能做什么”如新增、删除按钮的显示和执行数据权限控制 “能看到什么数据”如销售经理只能查看自己团队的数据 实战 使用Q() 对象构建复杂查询实现灵活的数据权限计算 点击查看完整代码 您正在阅读的是《Django从入门到实战》专栏关注不迷路~
http://www.zqtcl.cn/news/258261/

相关文章:

  • 做网站最好选什么语言百度域名服务器
  • 网站维护一般多久西宁的网站建设
  • 网站建设需要什么工具投诉百度最有效的电话
  • 做家政网站公司策划公司英文
  • 自己建设个人网站要花费多少自己怎么制作微信网页链接
  • 邢台网站设计哪家专业php图书管理系统网站开发
  • 怎么去建一个网站艺术设计专业
  • 中国优秀设计网站有哪些内容万能影视免费观看app
  • 网站做响应式还是移动端广告创意设计模板
  • 企业网站建设的要求标准营销型网站定做价格
  • 兰溪优秀高端网站设计郑州正规网站制作公司
  • 霸气业务网站源码网站建设运营服务公司
  • 做seo对网站推广有什么作用网站开发程序流程图
  • 旅游网站怎么建设网站开发+搜索
  • 三分钟做网站传统企业建设营销型网站
  • 必须在当地网站备案化妆品做备案的网站
  • 网站建设7个主要流程图创建全国文明城市工作要求
  • 张店网站开发招聘怎样做网站变手机软件
  • 聊城做网站的公司流程网页设计网站模板
  • 宿迁网站建设哪家专业做网站宁夏
  • 静态网站规范贵州城乡建设厅施工员报名网站
  • 湖北长安建设集团股份有限公司网站wordpress主题套用
  • 本地门户网站系统小米应用商店
  • 网站建设怎么用宁波建设网网点
  • 购物网站二级页面模板国家企业信用公示信息系统官网app
  • tp框架做餐饮网站快速建站教程网
  • php自己做网站wordpress下拉刷新
  • 怎么提高网站收录量专业网站优化公司
  • 重庆建站费用素材最多的网站
  • 银联支付网站建设html5网站模板