1. 程式人生 > 實用技巧 >Django基礎07篇 ORM操作

Django基礎07篇 ORM操作

1.新增(類似資料庫操作的insert)

# 新增
#方式一:
models.Category.objects.create(name='MySQL')
#方式二:
c = models.Category(name='Oracle')
c.save()

models.Article.objects.create(
    title='orm學習',
    content='orm學習, content',
    category_id=2
)  # 知道外來鍵,id

category = models.Category.objects.get(id=3)
models.Article.objects.create(
    title
='orm學習2', content='orm學習2, content', category=category # category_id=category.id # category=category 這兩行是等價的 ) # 不知道外來鍵,id

2.修改(類似資料庫操作的update)

# 修改

c = models.Category.objects.get(id=3)
c.name = 'JAVA'
c.save()  # 修改單條資料

models.Category.objects.all().update(name='abc')  # 修改全表的某個欄位
# 按照某個條件修改 models.Category.objects.filter(name='abc').update(name='ccc', age=15)

3.刪除(類似資料庫操作的delete)

# 刪除
c = models.Category.objects.get(id=6)
c.delete()  # 刪除某一條

models.Category.objects.all().delete()  # 刪除全表資料

# 按照某些條件刪除
models.Category.objects.all().delete()

4.查詢(類似資料庫操作的select)

# 簡單查詢
result = models.Category.objects.all() # 查詢所有的資料 print(result) print(result.values()) print(result.values_list()) print(result.values('name')) # 根據某個欄位的值過濾結果集 print(result.values_list('name')) # 根據某個欄位的值過濾結果集 print(result.first()) # 獲取結果集的第一個元素 print(result.count()) # 獲取結果集中結果個數 result = models.Category.objects.get(id=1) # 獲取單條結果 print(result) # 複雜查詢 # 大於、小於、大於等於、小於等於、in 、not 、或 result = models.Article.objects.filter(read_count__gt=0) # 大於0 print(result) result = models.Article.objects.filter(read_count__gte=0) # 大於等於0 print(result) result = models.Article.objects.filter(read_count__lt=0) # 小於0 print(result) result = models.Article.objects.filter(read_count__lte=0) # 小於等於0 print(result) result = models.Article.objects.exclude(read_count=0) # 不等於 not print(result) result = models.Article.objects.filter(id__in=[1, 2, 3]) # in print(result) # 模糊查詢 result = models.Article.objects.filter(title__contains='orm') # like,包含某個字串 print(result) result = models.Article.objects.filter(title__icontains='orm') # like,忽略大小寫包含某個字串 print(result) result = models.Article.objects.filter(title__endswith='xxx') # 以什麼結尾 # 如果用get取單獨1條資料時有報錯風險,建議使用下面的程式碼,更健壯 query_set = models.Article.objects.filter(id=5) if query_set: article = query_set.first() else: print('這條資料不存在') # 多條件查詢 or and # where read_count >0 or title like '%orm%' result = models.Article.objects.filter(Q(read_count__gt=0) | Q(title__contains='orm')) print(result) # where read_count >0 and title like '%orm%' result = models.Article.objects.filter(Q(read_count__gt=0) & Q(title__contains='orm')) print(result) result = models.Article.objects.filter(read_count=0,title='python06篇') print(result) # where read_count >0 and title not like '%orm%' result = models.Article.objects.filter(Q(read_count=0) & ~Q(title__contains='orm')) # ~放在Q()前代表Q的非 print(result)

查詢結果

<QuerySet [<Category: python>, <Category: Linux>, <Category: JAVA>, <Category: apche>, <Category: MySQL>]>
<QuerySet [{'id': 1, 'create_time': datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'update_time': datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'name': 'python'}, {'id': 2, 'create_time': datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'update_time': datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'name': 'Linux'}, {'id': 3, 'create_time': datetime.datetime(2020, 11, 18, 23, 6, 21, 743606), 'update_time': datetime.datetime(2020, 11, 29, 15, 12, 4, 149925), 'name': 'JAVA'}, {'id': 4, 'create_time': datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'update_time': datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'name': 'apche'}, {'id': 5, 'create_time': datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'update_time': datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'name': 'MySQL'}]>
<QuerySet [(1, datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'python'), (2, datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'Linux'), (3, datetime.datetime(2020, 11, 18, 23, 6, 21, 743606), datetime.datetime(2020, 11, 29, 15, 12, 4, 149925), 'JAVA'), (4, datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'apche'), (5, datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'MySQL')]>
<QuerySet [{'name': 'python'}, {'name': 'Linux'}, {'name': 'JAVA'}, {'name': 'apche'}, {'name': 'MySQL'}]>
<QuerySet [('python',), ('Linux',), ('JAVA',), ('apche',), ('MySQL',)]>
python
5
python
<QuerySet [<Article: orm學習2>, <Article: python基礎篇03>, <Article: python基礎篇01>]>
<QuerySet [<Article: orm學習2>, <Article: orm學習>, <Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基礎篇03>, <Article: python基礎篇02>, <Article: python基礎篇01>]>
<QuerySet []>
<QuerySet [<Article: orm學習>, <Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基礎篇02>]>
<QuerySet [<Article: orm學習2>, <Article: python基礎篇03>, <Article: python基礎篇01>]>
<QuerySet [<Article: python基礎篇03>, <Article: python基礎篇02>, <Article: python基礎篇01>]>
<QuerySet [<Article: orm學習2>, <Article: orm學習>]>
<QuerySet [<Article: orm學習2>, <Article: orm學習>]>
<QuerySet [<Article: orm學習2>, <Article: orm學習>, <Article: python基礎篇03>, <Article: python基礎篇01>]>
<QuerySet [<Article: orm學習2>]>
<QuerySet [<Article: python06篇>]>
<QuerySet [<Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基礎篇02>]>