要求 修改数据库 Django shell 数据级联(一对多) 元信息 定义字段 模型过滤 创建对象4种方式 查询集 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象..., 删除数据的时候先删除从表的数据,再删除主表的数据。...·使用Python的datetime.datetime实例表示的日期和时间,参数同DateField ·FileField ·一个上传文件的字段 ·ImageField ·继承了.../缓存集 查询集的缓存:每个查询集都包含一个缓存,来最小化对数据库的访问 在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做 一个缓存,并返回查询结果...实例表示的时间,参数同DateField ·DateTimeField ·使用Python的datetime.datetime实例表示的日期和时间,参数同DateField ·FileField
要知道查询数据库的操作相对而言是比较缓慢的,而直接从内存中直接读取数据就会快很多,因此缓存系统应运而生。...至于如何启动 Redis 服务,请参考教程最后的 Redis 服务部分。...cache_response 装饰器 这个装饰器用来装饰 django-rest-framework 的视图(单个视图函数、视图集中的 action 等),被装饰的视图将具备缓存功能。...另外我们还添加了 3 条自定义的缓存 key 的 KeyBit: 执行数据库查询的 sql 查询语句 分页请求的查询参数 Post 资源的最新更新时间 以上 6 条分别对应一个 KeyBit,KeyBit...缓存更新的逻辑: 新增、修改或者删除文章,触发 post_delete, post_save 信号,文章资源的更新时间将被修改。
import models 通过models.Field创建字段类型的对象,赋值给属性 对于重要数据都做逻辑删除,不做物理删除,实现方法是定义isDelete属性,类型为BooleanField,默认值为...定义字段类型 TimeField:使用Python的datetime.time实例表示的时间,参数同DateField DateTimeField:使用Python的datetime.datetime...,结合try/except使用 实例方法 str (self):重写object方法,此方法在将对象转换成字符串时会被调用 delete():将模型对象从数据表中删除 11....模型类的查询 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句...first():返回第一个对象 last():返回最后一个对象 exists():判断查询集中是否有数据,如果有则返回True 限制查询集,如果获取一个对象,直接使用[0] 模型查询集的缓存 这构成了两个查询集
SQL(结构化查询语言)很复杂,涉及许多不同的查询,用于创建,删除,更新或与数据库有关的任何其他内容。Django模型简化了任务并将表组织到模型中。通常,每个模型都映射到单个数据库表。...本文围绕如何使用Django模型方便地将数据存储在数据库中展开。此外,我们可以使用Django的管理面板来创建,更新,删除或检索模型的字段以及各种类似的操作。...通过所有这些,Django为您提供了一个自动生成的数据库访问API。请参阅进行查询。...从models.py导入相应的模型并将其注册到管理界面。...Django CRUD –插入,更新和删除数据 Django使我们可以使用称为ORM(Object Relational Mapper)的数据库抽象API与它的数据库模型进行交互,即添加,删除,修改和查询对象
从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。...它指定如何排序结果。...结果列表中的每个datetime.datetime对象被截取到给定的类型。 order参数默认为'ASC',或者'DESC'。 它指定如何排序结果。...tzinfo参数定义在截取之前将数据时间转换到的时区。 11. none() 调用none()将创建一个不返回任何对象的查询集,并且在访问结果时不会执行任何查询。...如果未提供列表,则会返回查询集中的所有对象。
一个管理网站,可让你添加、修改和删除投票项目。 我们假设你已经 安装了 Django 。...若不一致,你可以参考 Django 版本对应的教程或者更新 Django 到最新版本。 请参考 如何安装 Django 中的意见先删除旧版本的 Django 再安装一个新的。...mysite/settings.py: 该 Django 项目的设置/配置。请查看 Django settings 将会告诉你如何设置。...>>> p = Poll.objects.get(pk=1) # 从关联对象集中显示所有 choices -- 到目前为止还没有。...欲了解更多有关如何使用双下划线来通过 API 执行字段查询的,请查看 字段查询 。 如需完整的数据库 API 信息,请查看我们的 数据库 API 参考 。
需求 为了能够在Web端口动态添加定时任务的需求,本次来调研一下Celery 4.x 在Django框架下该如何动态添加定时任务。...("DJANGO_SETTINGS_MODULE", "django_con.settings") ## 创建celery app app = Celery('celery_tasks') # 从单独的配置模块中加载配置...image-20200515135653034 周期性任务的查询、删除等操作 其实周期性任务也是存储在数据库的数据,基本上是基于ORM的操作的。...周期性任务的查询 # 导入周期性任务 In [1]: from django_celery_beat.models import PeriodicTask # 查询目前所有的周期性任务 In [3]:...Out[11]: (1, {'django_celery_beat.PeriodicTask': 1}) 如果要删除周期性任务,必须首先暂停任务,然后再删除,如下: # 设置name为 my_taks1
需求 为了能够在Web端口动态添加定时任务的需求,本次来调研一下Celery 4.x 在Django框架下该如何动态添加定时任务。...", "django_con.settings") ## 创建celery app app = Celery('celery_tasks') # 从单独的配置模块中加载配置 app.config_from_object...= 'zh-hans' # 使用中国语言 TIME_ZONE = 'Asia/Shanghai' # 设置Django使用中国上海时间 # 如果USE_TZ设置为True时,Django会使用系统默认设置的时区...周期性任务的查询 # 导入周期性任务 In [1]: from django_celery_beat.models import PeriodicTask # 查询目前所有的周期性任务 In [3]:...Out[11]: (1, {'django_celery_beat.PeriodicTask': 1}) 如果要删除周期性任务,必须首先暂停任务,然后再删除,如下: # 设置name为 my_taks1
从“两种时间”说起 我们都知道,在Python中表示“时间”的对象是datetime.datetime。...那么相对的,aware datetime就是计算机能准确知道其时区的时间对象,他是一个准确的时间点,就落在时间轴上的某个地方,不管从哪个时区看,这个点都是绝对固定的。...Django也帮我们考虑过这种情况,即使此时我们使用本地时间timezone.localtime()进行查询,系统也会将其转换成UTC时间传入SQL语句: ?...那么,发送优惠券时,我们如何筛选网站内会员日是今日的所有用户? 下面这个filter是否正确?...__year等时间lookups时,使用任何aware时间均可(会被自动转换成UTC) queryset查询,涉及到时间lookups时,使用本地时间
queries 进行查询 一旦你创建了 数据表模型类,django 会自动给你一些数据库抽象API,让你可以创建、查询、更新、删除对象,下文将介绍如何使用这些API(以一个网页应用为例展开) 首先是创建表模型类...Retrieving objects 查出对象(QuerySet) 从数据库中查询对象,通过 表模型类的 Manager 管理器 来构造一个 QuerySet 。...--> 很可能两次查询请求之间可能有对象被删除或者新增,会造成两次结果不一致 print([e.headline for e in Entry.objects.all()]) print([e.pub_date...(cache) When QuerySets are not cached 不会保存 cache 缓存的情况 QuerySet 也不总是会缓存他的查询结果,当只需要(取值)结果集中的一部分时,cache...WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31'; 日期时间类 日期时间与日期不能混用 允许其他 关系类的字段查找(field-lookups
事实上,我们在上一部教程 HelloDjango - Django博客教程(第二版)的 页面侧边栏:使用自定义模板标签 已经讲解了如何获取归档日期列表,只是当时返回的归档日期列表直接用于模板的渲染,而这里我们需要将归档日期列表序列化后通过...具体来说,获取博客文章发表时间归档列表的方法是调用查询集(QuerySet)的 dates 方法,提取记录中的日期。...而这个接口中只需要序列化一个时间字段(类型为 Python 标准库中的 datetime.date),所以没必要单独定义一个序列化器了,直接拿 django-rest-framework 提供的用于序列化时间类型的...对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤出查询所指定的文章列表再返回。...由于这两个字段在 Post 中没有定义,Post 记录时间的字段为 created_time,因此我们需要显示地定义查询规则,定义的规则是: 查询参数名 = 查询参数值的类型(查询的模型字段,查询表达式
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...()) add() ()可填id与对象 把指定的model对象添加到关联对象集中。...models.Book.objects.first() >>> book_obj.authors.set([2, 3]) remove() 一对多的时候,remove()只能填对象,不能用id 从关联对象集中移除执行的...model对象 >>> book_obj = models.Book.objects.first() >>> book_obj.authors.remove(3) clear() 从关联对象集中移除一切对象...", "BMS.settings") import django django.setup() import datetime from app01 import models
kwargs = { # 动态查询的字段 } # 选择deleted_datetime为空的记录 if exclude_deleted: kwargs[ 'deleted_datetime__isnull...DateTimeField:日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。...HH:MM[:ss[.uuuuuu]] DurationField(Field) - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 FloatField...models.CASCADE:删除关联数据,与之关联也删除 models.DO_NOTHING:删除关联数据,引发错误IntegrityError models.PROTECT:删除关联数据,引发错误ProtectedError...) models.SET:删除关联数据, a.
上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。...不允许使用连续的下划线,这是由django的查询方式决定的。...default=False) # 逻辑删除 class ScriptInfo(models.Model): script_name = models.CharField(max_length=...default=False) # 逻辑删除 添加了模型中的字段类型之后,执行数据迁移进行变更。...| | django_content_type | | django_migrations | | django_session
books = models.Manager() 当为模型类指定管理器后,django不再为模型类生成名为objects的默认管理器 管理器Manager 管理器是Django的模型进行数据库的查询操作的接口...,Django应用的每个模型都拥有至少一个管理器 自定义管理器类主要用于两种情况 情况一:向管理器类中添加额外的方法:见下面“创建对象”中的方式二 情况二:修改管理器返回的原始查询集:重写get_queryset...pub_date) book.bread=0 book.bcommet=0 book.isDelete = False return book 引入时间包...:from datetime import * 调用:book=BookInfo.create("hello",datetime(1980,10,11)); 保存:book.save() 方式二:在自定义管理器中添加一个方法...delete():将模型对象从数据表中删除
distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...()) add() 把指定的model对象添加到关联对象集中。...>>> book_obj = models.Book.objects.first() >>> book_obj.authors.set([2, 3]) remove() 从关联对象集中移除执行的model...对象 >>> book_obj = models.Book.objects.first() >>> book_obj.authors.remove(3) clear() 从关联对象集中移除一切对象。...", "BMS.settings") import django django.setup() import datetime from app01 import models
如果你不需要它们中的任何一个或所有应用,可以在运行migrate之前从INSTALLED_APPS中自由地注释或删除相应的行。...让我们演示一下如何添加一个自定义的方法: # polls/models.py import datetime from django.db import models from django.utils...(days=1) 注意import datetime 和from django.utils import timezone分别引用Python 的标准datetime 模块和Django django.utils.timezone...# Django为主键查询提供了一个缩写:pk。...每一种类型的字段,Django管理站点都知道如何显示它们; 每个DateTimeField字段都会有个方便的JavaScript快捷方式。
每个模型对 应数据库中唯一的一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承自django.db.models.Model。...也可以使用一条语句创建并保存一个对象,使用create()方法 查询对象 通过模型中的管理器构造一个查询集,来从你的数据库中获取对象。 查询集(queryset)表示从数据库中取出来的对象的集合。...过滤器基于所给的参数限制查询的结果。 从SQL 的角度,查询集和SELECT 语句等 价,过滤器是像WHERE 和LIMIT 一样的限制子句。 你可以从模型的管理器那里取得查询集。...gt 大于 gte 大于或等于 lt 小于 lte 小于或等于 range 在指定范围内 year /month / day/ week_day 对于日期和日期时间字段,匹配年/月/日/星期 字段查询...User.objects.defer("username", "email") 删除对象 删除对象使用delete()。这个方法将立即删除对象且没有返回值。
领取专属 10元无门槛券
手把手带您无忧上云