68.ORM查询条件:date,time,year,week_day等
1. date:
首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5
打印出查询的结果:
<QuerySet []>:但是查询的结果为空的QuerySet,这个的问题在于在我们的mysql数据库中没有存储关于时区的信息。
并且我们的django底层执行的sql语句为:SELECT article
.id
, article
.title
, article
.content
, article
.category_id
, article
.create_time
FROM article
WHERE DATE(CONVERT_TZ(article
.create_time
, 'UTC', 'Asia/Shanghai')) = 2020-02-05,从我们的django底层执行的sql语句可以看出date方法又调用了CONVERT_TZ方法,将article.create_time字段的‘UTC’时区转换为‘Asia/Shanghai’时区,并且将date设置为2020-02-05.但是mysql数据库中并没有存储有关时区的数据。所以我们首先要先将有关时区的文件进行导入。
解决办法:1.windows系统:
浏览器中复制该url:https://dev.mysql.com/downloads/timezones.html,找到timezone_2019c_posix.zip - POSIX standard,点击进行下载,下载完成后,进行解压,并且将解压完成的所有文件复制到mysql文件中的:F:\mysql\mysql5.7-win32\data\mysql文件夹中,在进行粘贴之前可以先将mysql文件夹中的文件进行备份,以防粘贴之后mysql不能使用,如果遇到文件名相同的可以选择替换,之后将mysql服务进行重启。
再次运行项目,打印出结果为:
<QuerySet [<Article: <(Article: id: 1,title: Hello, content: 你好)>>, <Article: <(Article: id: 2,title: Hello World, content: 大家好)>>, <Article: <(Article: id: 3,title: 钢铁是怎样炼成的, content: 你好
)>>, <Article: <(Article: id: 4,title: 中国吸引力, content: 精彩极了
)>>]>, 此时就打印出了数据库表中满足条件的文章。
原生sql语句:SELECT article
.id
, article
.title
, article
.content
, article
.category_id
, article
.create_time
FROM article
WHERE DATE(CONVERT_TZ(article
.create_time
, 'UTC', 'Asia/Shanghai')) = 2020-02-05
2.Linux或者是Mac系统:
在终端命令行窗口:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p ,输入密码,从系统中加载时区文件更新到mysql中。
2. year: 根据年份进行查找,示例代码如下:
from .models import Article, Category
from django.http import HttpResponse
from datetime import datetime, date
from django.utils.timezone import make_aware
def index1(request):
# 查找create_time为2020年的文章
articles = Article.objects.filter(create_time__year=2020)
# 查找create_time大于等于2020年的文章
articles = Article.objects.filter(create_time__year__gte=2020)
print(articles)
print(articles.query)
return HttpResponse("success")
3.month: 根据月份进行查找,示例代码如下:
# 查找create_time为2月份的文章
articles = Article.objects.filter(create_time__month=2)
# 查找create_time大于等于2月份的文章
articles = Article.objects.filter(create_time__month__gte=2)
4. day:根据日期进行查找,示例代码如下:
# 查找create_time为2号的文章
articles = Article.objects.filter(create_time__day=2)
# 查找create_time大于等于2号的文章
articles = Article.objects.filter(create_time__day__gte=2)
5.week_day:Django 1.11新增的查找方式。同year,根据星期几进行查找。1表示星期天,7表示星期六,2-6表示星期一到星期五。示例代码如下:
# 查找星期三发布的所有文章
articles = Article.objects.filter(create_time__week_day=4)
6.time: 根据时间进行查找,示例代码如下:
在我们的数据库表中,所存储的时间为UTC时区的时间。因此在使用时间进行查找的时候我们可以通过加8个小时进行查找。
from datetime import time
articles = Article.objects.filter(create_time__time=time(hour=11, minute=4, second=59))
此时返回的结果:QuerySet为空,原因是在mysql数据库中存储的时间中的秒,精确到小数点后后六位,所以可以通过使用range区间的方式进行查找,区间可以使用range,以下代码实现:
start_time = time(hour=11, minute=3, second=30)
end_time = time(hour=11, minute=3, second=31)
articles = Article.objects.filter(create_time__time__range=(start_time, end_time))
print(articles)
print(articles.query)
return HttpResponse("success")
此时打印出结果为:
<QuerySet [<Article: <(Article: id: 3,title: 钢铁是怎样炼成的, content: 你好)>>]>
执行的原生sql语句:SELECT article
.id
, article
.title
, article
.content
, article
.category_id
, article
.create_time
FROM article
WHERE TIME(CONVERT_TZ(article
.create_time
, 'UTC', 'Asia/Shanghai')) BETWEEN 11:03:30 AND 11:03:31
68.ORM查询条件:date,time,year,week_day等的更多相关文章
- ORM查询条件
模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...
- 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time
模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...
- 69.ORM查询条件:isnull和regex的使用
首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...
- 64.Python中ORM查询条件:in和关联模型
定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...
- 65.ORM查询条件:gte,gt,lte和lt的使用
1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: from django.db import ...
- django orm 的查询条件
Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...
- django ORM常用查询条件
假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...
- ORM查询简化
文章出处 https://www.cnblogs.com/wupeiqi/articles/6216618.html 字段 常用字段 AutoField(Field) - int自增列,必须填入参数 ...
- Django(17)orm查询操作
前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...
随机推荐
- WEB前端资源项目整合
WEB前端资源项目整合 vue.js高仿饿了么(1-13章全)链接:https://pan.baidu.com/s/1qYSiYXluA1AlEV0EskxWZw提取码:25z9 Vue.js 2.5 ...
- 009、MySQL取当前时间Unix时间戳,取今天Unix时间戳
#取Unix时间戳 SELECT unix_timestamp( ) ; #取今天时间戳 SELECT unix_timestamp( curdate( ) ); 显示如下: 不忘初心,如果您认为这篇 ...
- uniapp 小程序 flex布局 v-for 4栏展示
注:本项目的图片资源来源于后端接口,所以使用的是v-for. 关键词:uniapp 小程序 flex布局 v-for 4栏展示 自适应 <view style="display: fl ...
- centos6或7查看端口占用及解除占用
一.查看端口占用 netstat -lnp|grep 要查看的端口号 例如:查看占用端口7000的进程 netstat -lnp|grep 7000 二.清除占用 (1)一次性的清除占用80端口的程序 ...
- 指令——cp
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 指令:cp (copy,复制) 作用:复制文件 ...
- redis3.2.2 集群
http://blog.csdn.net/imxiangzi/article/details/52431729 http://www.2cto.com/kf/201701/586689.html me ...
- linux中实用的小工具lrzsz
使用xshell或者其他ssh工具连接上服务器后我们需要向服务器中上传或者下载文件 这时候就用到了lrzsz可以代替其他的ftp软件 yun install - y lrzsz 安装 rz 上传 sz ...
- (转)zookeeper理解
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题 ...
- 一百零五、SAP中ALV事件之十七,让ALV表格修改后保存到数据库
一.我们来到代码界面设置保存按钮的代码 二.i_grid_settings这个属性用来编辑单元格之后,返回给程序编辑后的值 三.我们双击点 'REUSE_ALV_GRID_DISPLAY',来到定义 ...
- PowerDesigner创建索引
防止以后忘记怎么设置索引,记录下来方便查翻 1:选中Table 2:找到Table对应的Indexes 3:选中一条记录,点击红框中的小手(Properties)或双击该记录,进入到详细里面 4:找到 ...