您的位置:首页 > 编程语言 > Python开发

Python开发【Django】:时间处理

2017-02-24 10:40 363 查看

时间格式化

  做博客后台时,需要经常对数据库里面的时间格式(2017-02-17 02:10:44.308638)进行处理,格式化成自己想要的时间(列如年月日),下面就来记录下如何对时间进行处理

1、时间进行格式化分组

class Article(models.Model):
nid = models.BigAutoField(primary_key=True)
title = models.CharField(verbose_name='文章标题', max_length=128)
summary = models.CharField(verbose_name='文章简介', max_length=255)
read_count = models.IntegerField(default=0)
comment_count = models.IntegerField(default=0)
up_count = models.IntegerField(default=0)
down_count = models.IntegerField(default=0)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid')
category = models.ForeignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True)

type_choices = [
(1, "Python"),
(2, "Linux"),
(3, "OpenStack"),
(4, "GoLang"),
]

article_type_id = models.IntegerField(choices=type_choices, default=None)

tags = models.ManyToManyField(
to="Tag",
through='Article2Tag',
through_fields=('article', 'tag'),
)


models.py DateTimeField类型
处理函数:

def home(request, site):
"""
博主个人首页
:param request:
:param site: 博主的网站后缀如:http://xxx.com/wupeiqi.html
:return:
"""

# 生成三个字段nid,num,ctime 日期按照%Y-%m年月进行分组
date_list = models.Article.objects.raw(         # raw执行原生SQL语句
'select nid, count(nid) as num,strftime("%Y-%m",create_time) as ctime from repository_article group by strftime("%Y-%m",create_time)')
# date_format(create_time,"%Y-%m")      # 上边是sqllist的方式,mysql把strftime更换为date_format即可

# date_list 提取数据的方法
for item in date_list:
print(item.nid,item.num,item.ctime)
# 4 1 2017 - 01
# 13 8 2017 - 02
# 7 1 2017 - 03


把日期格式,进行年月分组,并进行统计每组包含的个数

2、根据时间格式进行检索匹配

def filter(request, site, condition, val):
---snip---

elif condition == 'date':
# mysql的执行方法
# article_list = models.Article.objects.filter(blog=blog).extra(
# where=['date_format(create_time,"%%Y-%%m")=%s'], params=[val, ]).all()

# extra 构造额外的查询条件或者映射,如:子查询
article_list = models.Article.objects.filter(blog=blog).extra(   # val 传入的日期参数 如:2017-02
where=['strftime("%%Y-%%m",create_time)=%s'], params=[val, ]).all()    # python两个%表示一个%的字符 var对应%s
# 上面语句等同于 select * from article where strftime("%Y-%m",create_time)=2017-02


Article数据表中检索时间格式为2017-02的所有匹配的数据对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: