前言
django 查詢數據庫的時候,數據存的是 datetime() 日期格式的數據 '2020-06-22 22:34:14'
但是我們用 ORM 查詢的時候,查詢出來的結果是 'datetime.datetime(2020, 6, 22, 22, 34, 14)}' 跟我們預期的結果不符合。
如果每次對查詢的結果日期格式后再輸出會比較麻煩,最好的解決辦法是在查詢的時候對日期格式化,這樣查詢的結果就不用二次處理
問題描述
使用 sql 查詢,數據庫里面的日期格式是'2020-06-22 22:34:14'
SELECT * from yoyo_card where card_user = 'yoyo2';

使用 django 查詢的結果是 'add_time': datetime.datetime(2020, 6, 22, 22, 34, 14)
Card.objects.filter(card_user='yoyo2').values()
MyDjango>python manage.py shell
>>> from yoyo.models import Card
>>>
>>> Card.objects.filter(card_user='yoyo2').values()
<QuerySet [{'id': 2, 'card_id': '520000000001', 'card_user': 'yoyo2', 'add_time': datetime.datetime(2020, 6, 22, 22, 34, 14)}]>
>>>
我們期望查詢的結果,日期應該顯示 格式化后的字符串 'add_time': '2020-06-22 22:34:14'
使用 extra 查詢
先用 sql 的 DATE_FORMAT 查詢,把日期格式化
SELECT card_id, card_user, DATE_FORMAT(add_time, '%Y-%m-%d %H:%i:%s') as add_time
from yoyo_card where card_user = 'yoyo2';

那么對應 django 的 extra 查詢,% 是python操作符,這里用兩個%%表示
Card.objects.filter(card_user='yoyo2').extra(select={'add_time':'DATE_FORMAT(add_time, "%%Y-%%m-%%d %%H:%%i:%%s")'})
# 作者-上海悠悠 QQ交流群:717225969
MyDjango>python manage.py shell
>>> from yoyo.models import Card
>>>
>>> Card.objects.filter(card_user='yoyo2').extra(select={'add_time':'DATE_FORMAT(add_time, "%%Y-%%m-%%d %%H:%%i:%%s")'}).values('card_id', 'card_user', 'add_time')
<QuerySet [{'add_time': '2020-06-22 22:34:14', 'card_id': '520000000001', 'card_user': 'yoyo2'}]>
>>>
這樣查詢到的日期結果就會顯示字符串 'add_time': '2020-06-22 22:34:14'
