首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django学习笔记之Queryset详解

’> QuerySet是延迟获取的,只有当用到这个QuerySet时,才会查询数据库求值。...另外,查询到的QuerySet又是缓存的,当再次使用同一个QuerySet时,并不会再查询数据库,而是直接从缓存获取(不过,有一些特殊情况)。...QuerySet的方法 数据库的常用操作就四种:增、删、改、查,QuerySet的方法涉及删、改、查。后面还会讲model对象的方法,model方法主要是增、删、改、还有调用model实例的字段。...只返回主表(即Author表)的所有字段值,即使在查询时关联了其它表,关联表的字段也不会返回,只有当我们通过Author instance用关联表时,Django才会再次查询数据库获取值。...如果只想知道一个QuerySet有多大,而不想获取QuerySet中的每个元素,那就用count();如果已经从数据库获取到了QuerySet,那就用len() 2.4.12  contains/startswith

2.7K30

Django-models & QuerySet API

django中配置mysql数据库 查询queryset时如果需要选取查询集中的某个子集的字段时, 应该用切片,或者first 选择某个子集对象,这样才能够使用到 子集的字段,直接queryset后选择字段会直接报错...一是在INSTALLED_APPS里面加入app名称; 二是配置数据库相关信息 View Code 定义数据库表结构  models.py 使用orm框架,不需要编写原生的sql语句 from django.db...   默认都可以修改,如果为false,admin上面不可修改且不显示,但是数据库可以改 error_messages   自定义错误信息,是字典类型 help_text   该字段的提示信息 unique...Code  创建表 # python manage.py makemigrations #  python manage.py migrate QeurySet API 数据库接口相关的接口叫queryset...列表里的元素是字典,而不是queryset对象列表。

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    django 1.8 官方文档翻译: 2-5-6 多数据库

    数据库自动路由 使用多数据库最简单的方法是建立一个数据库路由模式。默认的路由模式确保对象’粘滞‘在它们原始的数据库上(例如,从foo 数据库中获取的对象将保存在同一个数据库中)。...如果该主键值在second 数据库中没有使用,那么你不会遇到问题 —— 该对象将被复制到新的数据库中。...选择一个数据库用于删除表单 默认情况下,删除一个已存在对象的调用将在与获取对象时使用的相同数据库上执行: >>> u = User.objects.using('legacy_users').get(username...多数据库上使用get_queryset() 如果你正在覆盖你的管理器上的get_queryset(),请确保在其父类上调用方法(使用super())或者正确处理管理器上的_db属性(一个包含将要使用的数据库名称的字符串...多数据库上使用原始游标 如果你正在使用多个数据库,你可以使用django.db.connections来获取特定数据库的连接(和游标):django.db.connections是一个类字典对象,它允许你使用别名来获取一个特定的连接

    1.5K20

    django select_related和prefetch_related的用法与区别

    当我们使用Article.objects.all()查询文章时,我们做了第一次数据库查询,查询的是blog_article数据表, 得到的数据只是文章对象列表,然而并没有包含与每篇文章相关联的category...for循环每运行一次,django都要对数据库进行一次查询,造成了极大的资源浪费。为什么我们不能再第一次获取文章列表的同时就获取每篇文章相关联的category和tags对象信息呢?...# 获取id=13的文章对象同时,获取其相关category和相关作者名字信息。...# 获取id=13的文章对象同时,获取其相关tags信息 Article.objects.prefetch_related(‘tags’).get(id=13) 现在问题来了,如果我们获取tags对象时只希望获取以字母...# 获取文章列表及每篇文章相关的名字以P开头的tags对象信息 Article.objects.all().prefetch_related( Prefetch(‘tags’, queryset=Tag.objects.filter

    1.4K20

    Django 之 Models(Models 模型 & 数据表关系)

    ,操作上把类等价于表格 类对应表格 类中的属性对应表中的字段 在应用中的models.py 文件中定义class 所有需要使用ORM的class都必须是 models.Model 的子类 class 中的所有属性对应表格中的字段...定义和数据库表映射的类 --- 在应用中的models.py 文件中定义class 所有使用ORM 的class都必须是models.Models 的子类 class中的所有属性对应表格中的字段 字段的类型都需使用...,为了避免出现混乱,如果数据库中没有数据,每次迁移前可以把系统自带的sqlite3数据库删除 数据相关操作 查看数据库中的数据 1....类型 Student.objects.all() # 如果要取出所有QuerySet类型中的所有数据对象,需要遍历取出所有的对象,再用对象.属性来查看值 s = Student.object.all(...对象 = 类() # 使用类实例化对象 对象.属性 = 值 # 给对应的对象的属性赋值 对象.save() # 必须要执行保存操作,否则数据没有进入数据库 # python3 manage.py

    2.4K87

    用django写接口(优化篇)

    Request 继承 HttpRequest,里面有个 request.data 属性,可以处理任意数据,例如 'POST','PUT','PATCH',其用法类似表单中的 request.POST (...(serializer.data) # 没有分页则全部展示 serializer = self.get_serializer(queryset, many=True)...获取列表 ? 获取列表结果 ? 新建数据 ? 新建数据返回结果 ? 获取详情 ? 获取详情返回结果 ? 更新详情 ? 更新详情返回结果 ? 删除数据 ? 删除数据返回结果 有坑!...在结束文章的最后,记录自己写的时候遇到的一个坑,当更新 ManyToMany 字段的时候,我们需要重新写 post 方法,直接传 id 是不能更新的,直接传 id 是不能更新的,直接传 id 是不能更新的...# 假设我们的 post 有一个 ManyToMany 字段 tags class PostDetailView(APIView): # 更新的时候,需要约定好 ManyToMany

    2.2K20

    Django学习笔记之Django ORM Aggregation聚合详解

    在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo聚合就能满足这些要求。...book和author是manytomany的关系,我们可以为每本书总结出这种关系。...# 第二个对象 >>> q[1] >>> q[1].authors__count 1 也可以指定生成属性的名字: >>> q = Book.objects.annotate...但是第一个查询的注解包含其该出版商发行的所有图书的总数;而第二个查询的注解只包含出版过好书的出版商的所发行的好书(评分大于3分)总数。在第一个查询中,注解在过滤器之前,所以过滤器对注解没有影响。...就不是在原始的 QuerySet 返回结果中对每个对象中添加注解,而是根据定义在 values() 从句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得的

    1.1K20

    【Python全栈100天学习笔记】Day41 Django深入理解框架

    如果对这些东西感到很困惑也不要紧,文末提供了字段类、字段属性、元数据选项等设置的相关说明,不清楚的读者可以稍后查看对应的参考指南。 再次执行迁移操作,先通过模型生成迁移文件,再执行迁移创建二维表。...说明2:查询多个对象的时候返回的是QuerySet对象,QuerySet使用了惰性查询,即在创建QuerySet对象的过程中不涉及任何数据库活动,等真正用到对象时(求值QuerySet)才向数据库发送SQL...TimeField 存储时间 URLField 存储URL的CharField UUIDField 存储全局唯一标识符 字段属性 通用字段属性 选项 说明 null 数据库中对应的字段是否允许为NULL...default 字段的默认值 editable 字段在后台模型管理或ModelForm中是否显示,默认为True error_messages 设定字段抛出异常时的默认消息的字典,其中的键包括null...related_name:用于获取关联对象的关联管理器对象(反向查询),如果不允许反向,该属性应该被设置为'+',或者以'+'结尾。 to_field:指定关联的字段,默认关联对象的主键字段。

    2.3K30

    drf框架序列化和返序列化

    , ] # 为choices的字段,获取值后的映射关系 get_字段名_display() sex = models.IntegerField(choices=SEX_CHOICES, default=...model类中必须存在该字段 不需要序列化字段 不需要序列化的属性字段在序列化类中不需要声明 不需要序列化的属性字段在序列化类中设置只写属性write_only=True 2.在views视图中 from...类'''(user_obj).data return APIResponse(0, 'ok', results=user_obj_data) 获取models中的对象 我们自定义的Serializer...many 序列化数据可以为状态User类的多个对象的单列集合,不能是多列集合 注: 单列集合[a,b,c.....]...注意点:如果类的字段值应用在反序列化,我们可以在他的字段的属性上加上write_only=True 里面所提及的字段必须传入 常用的约数条件与django中from组件约数条件有点类似: error_messages

    87951

    37.Django1.11.6文档

    如果没有给定自述名,Django 将根据字段的属性名称自动创建自述名 —— 将属性名称的下划线替换成空格。...但在通常情况下,你往往想要获取的是完整数据集的一个子集。 要创建这样一个子集,你需要在原始的的QuerySet上增加一些过滤条件。...当你最初获取数据时不知道是否需要这些特定字段的情况下,如果你正在使用查询集的结果,你可以告诉Django不要从数据库中检索它们。... choices 当表单字段没有choices 属性时,该属性是随意的。 如果字段有choice 属性,当Field的该属性更新时,它将覆盖你在这里的任何设置。...管理站点有许多hook用于定制,但要注意试图专门使用这些hook。 如果你需要提供一个更加以流程为中心的界面,它抽象出数据库表和字段的实现细节,那么可能需要编写自己的视图。

    24.4K80

    Django之QuerySet详解

    换句话说,用order_by()方法对QuerySet对象进行操作会返回一个扩大版的新QuerySet对象。因此,使用多值字段对结果进行排序时要格外小心。 没有方法指定排序是否考虑大小写。...如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。...还可以使用正常连接语法来执行相关字段的相关字段。...当最初获取数据时不知道是否需要这些特定字段的情况下,如果正在使用查询集的结果,可以告诉Django不要从数据库中检索它们。...update_or_create方法尝试通过给出的kwargs 去从数据库中获取匹配的对象。 如果找到匹配的对象,它将会依据defaults 字典给出的值更新字段。

    2.4K20

    Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

    保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) 外键字段 ForeignKey 更新一个外键字段的写法和普通字段的完全一致,只需要将正确类型的对象分配给相关字段即可...通常来说,QuerySet 的结果只会在你 “访问” 它们的时候才会从数据库获取,当你执行时,QuerySet 会通过访问数据库来取值(When you do, the QuerySet is evaluated...() 来更高效的获取数据条数 用 list() 把 QuerySet 强制转换成 list 时 强转成 bool 类型或者 作为 if 条件 时 如果 QuerySet 的查询结果至少有一个(数据对象...,你可以用 表模型类的 Manager 对象来调用 .get() 方法,往里面传入查询条件来直接获取到数据对象。...all() .select_related(*field) 优化,可以把对象查出来,并附带字段,后期对象 .字段 不会再触发数据库操作 .prefetch_related(*lookups) 优化相关

    2.9K20

    Django内置权限扩展案例

    原本overmind只管理了我们自己部门的数据库,权限设置只针对具体的功能不针对细粒度的数据库实例,例如用户A 有审核的权限,那么用户A 可以审核所有的DB,此时使用内置的权限系统就可以满足需求了,但随着系统的不断完善要接入其他部门的数据库管理...:获取登录用户的所有组,然后循环查询每个组有读取权限的数据库实例,最后把每个组有权限读的数据库实例进行合并返回 获取登录用户的所有组用到了ManyToMany的查询方法:request.user.groups.all...() 最终返回的一个结果是QuerySet,所以我们需要先构造一个空的Queryset:Mysql.objects.none() QuerySet合并不能用简单的相加,应为:QuerySet-1 | QuerySet...属性:group.read.all() 更多关于Django ORM查询的内容可以看这篇文章Django model select的各种用法详解有详细的总结 执行操作权限控制 除了上边的两个场景之外我们还需要在执行具体的操作之前去判断是否有权限...,来获取到用户所有的组,然后根据传入的第一个参数类型读取或写入和第二个参数DB实例来获取到有权限的所有组,然后对两个组取交集,交集不为空则表示有权限,为空则没有 M2M的.all()取出来的结果是个list

    89320
    领券