時間格式化
做博客后台時,需要經常對數據庫里面的時間格式(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'), )
處理函數:
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的所有匹配的數據對象
