django orm 基本操作
QuerySet對象轉換成字典對象
from django.forms.models import model_to_dict
u = User.objects.get(id=1)
u_dict = model_to_dict(u)
type(u_dict)
ORM常用操作
# 查詢所有結果
music = Music.objects.all()
print('music:', music)
# 過濾條件,可以在後面接 .count() 統計過濾的數據
fi = Music.objects.filter(music_name='忘不了')
print('filter: ',fi)
# 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。
ge = Music.objects.get(music_name='忘不了')
print('get: ',ge)
# 篩選條件不匹配的對象
ex = Music.objects.exclude(music_name='忘不了')
print('exclude: ', ex)
# 返回可迭代的字典序列
va = Music.objects.values()
print('values: ', va)
# 返回的是一個元組序列
vals = Music.objects.values_list()
print('values_list: ', vals)
# 對查詢結果排序
order = Music.objects.order_by()
print('order: ', order)
# 對查詢結果反向排序
reverse = Music.objects.reverse()
print('reverse', reverse)
# 返回數據庫中匹配查詢(QuerySet)的對象數量
count = Music.objects.count()
print('count:', count)
# 返回第一條記錄
first = Music.objects.first()
print('first: ',first)
# 返回最後一條記錄
last = Music.objects.last()
print('last: ',last)
# 如果QuerySet包含數據,就返回True,否則返回False
exi = Music.objects.exists()
print('exists: ',exi)
distinct = Music.objects.distinct()
print('distinct: ', distinct)
ORM雙下劃線操作
# 獲取id大於4 且 小於6的值
ltgt = Music.objects.filter(id__lt=6, id__gt=4)
print('ltgt: ', ltgt)
# 獲取id等於3、6的數據
ideq = Music.objects.filter(id__in=[3,6])
print('ideq: ', ideq)
# 獲取id不等於3、6的數據
notin = Music.objects.exclude(id__in=[3, 6])
print('notin: ', notin)
# 獲取music_name字段包含"祝"的
contains = Music.objects.filter(music_name__contains='祝')
print('contains: ', contains)
# icontains大小寫不敏感
icontains = Music.objects.filter(music_author__icontains='s')
print('icontains: ', icontains)
# id範圍是1到5的,等價於SQL的bettwen and
id__range = Music.objects.filter(id__range=[1,5])
print('id__range: ', id__range)
輸出:
music: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (5)>, <Music: Music object (6)>]>
filter: <QuerySet [<Music: Music object (5)>]>
get: Music object (5)
exclude: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (6)>]>
values: <QuerySet [{'id': 3, 'music_author': '張學友', 'music_name': '祝福', 'music_album': '祝福', 'music_time': '1997年1月', 'music_type': '流行', 'music_lyrics': '張學友', 'music_arranger': '張
學友'}, {'id': 4, 'music_author': '張學友sssssS', 'music_name': '祝福', 'music_album': '祝福', 'music_time': '1997年1月', 'music_type': None, 'music_lyrics': '', 'music_arranger': '張學友'}, {'id':
5, 'music_author': '張學友', 'music_name': '忘不了', 'music_album': '忘不了', 'music_time': '1997年1月', 'music_type': '流行', 'music_lyrics': '張學友', 'music_arranger': '張學友'}, {'id': 6, 'music
_author': '張學友', 'music_name': '愛你', 'music_album': '吻別22222', 'music_time': '1997年1月', 'music_type': '流行', 'music_lyrics': '張學友', 'music_arranger': '張學友'}]>
values_list: <QuerySet [(3, '張學友', '祝福', '祝福', '1997年1月', '流行', '張學友', '張學友'), (4, '張學友sssssS', '祝福', '祝福', '1997年1月', None, '', '張學友'), (5, '張學友', '忘不了', '忘不了
', '1997年1月', '流行', '張學友', '張學友'), (6, '張學友', '愛你', '吻別22222', '1997年1月', '流行', '張學友', '張學友')]>
order: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (5)>, <Music: Music object (6)>]>
reverse <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (5)>, <Music: Music object (6)>]>
count: 4
first: Music object (3)
last: Music object (6)
exists: True
distinct: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (5)>, <Music: Music object (6)>]>
ltgt: <QuerySet [<Music: Music object (5)>]>
ideq: <QuerySet [<Music: Music object (3)>, <Music: Music object (6)>]>
notin: <QuerySet [<Music: Music object (4)>, <Music: Music object (5)>]>
contains: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>]>
icontains: <QuerySet [<Music: Music object (4)>]>
id__range: <QuerySet [<Music: Music object (3)>, <Music: Music object (4)>, <Music: Music object (5)>]>
ORM日期操作
# 定義表
class User(models.Model):
id = models.BigAutoField(primary_key=True)
# 創建時間
create_datetime = models.DateTimeField(auto_now_add=True)
# 最後修改時間
modify_datetime = models.DateTimeField(auto_now=True)
# 查詢
date_time = time.strftime("%Y-%m-%d", time.localtime())
res = User.objects.filter(create_datetime__startswith=date_time)
# 查詢某一個字段的數據
# create_datetime是models中的字段名
list_raw = User.objects.filter(name='xxx') \
.extra(select={"create_datetime": "DATE_FORMAT(create_datetime, '%%Y-%%m-%%d %%H:%%i:%%s')"}) \
.values('id', 'create_datetime').order_by('-create_datetime')
參考文獻:
https://www.cnblogs.com/study-learning/p/9969486.html
https://docs.djangoproject.com/en/2.2/ref/models/querysets/