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等於36的數據
ideq = Music.objects.filter(id__in=[3,6])
print('ideq: ', ideq)
# 獲取id不等於36的數據
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範圍是15的,等價於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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章