亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

update()與save()的區別有哪些

發布時間:2020-09-09 15:05:45 來源:億速云 閱讀:571 作者:小新 欄目:編程語言

小編給大家分享一下update()與save()的區別有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

update()與save()的區別

兩者都是對數據的修改保存操作,但是save()函數是將數據列的全部數據項全部重新寫一遍,而update()則是針對修改的項進行針對的更新效率高耗時少。

所以以后對數據的修改保存用update()

讓我們通過orm對數據庫操作時候,讓終端顯示內部查詢操作sql語句:

在Django項目的settings.py文件中,在最后復制粘貼如下代碼:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

配置好之后,再執行任何對數據庫進行操作的語句時,會自動將Django執行的sql語句打印到pycharm終端上

補充:

除了配置外,還可以通過一點query即可查看查詢語句,具體操作如下:

update()與save()的區別有哪些

only 與 defer

拿到的是一個對象  兩者是相反的

(前提設置:設置每次操作數據庫時候都會有sql語句現實在pycharm終端,上面已說明步驟)

先看看only:

update()與save()的區別有哪些

看看defer

update()與save()的區別有哪些

choice屬性

choice這個屬性,用來限制用戶做出選擇的范圍。比如說性別的選擇(男或女)

 class MyUser(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    choices = ((1, '男'), (2, '女'), (3, '其它'))
    gender = models.CharField(choices=choices, default=1, max_length=5)

choice接收一個元組(保證值不可變),同理每一個選項也是由一個元組(value,display_name)構成。顯而易見,display_name就是要在頁面中展示的。

如何取到value和displayname?

比如說實例一個User對象user_obj,

user_obj.gender = value  (通過屬性取value)

user_obj.get_gender_display() = display_name  (通過 get_屬性_display()方法取display_name)

在模板中可以通過模板語言{{ user_obj.gender }}很簡單地顯示value,但不能直接調用get屬性_display方法(模板畢竟是模板語言),要解決這個問題,可以用自定義過濾器來搞定:

來回顧一下如何自定義過濾器:

1,在應用名下新建一個名為templatetags文件夾

2,在該文件夾內新建一個py文件,名字隨意

3,在該py文件內添加固定代碼和自定義過濾器代碼

from django import template
register = template.Library()
@register.filter(name='displayName')
def displayName(obj):
    res = obj.get_gender_display
    return res()
# 視圖層:
from django.shortcuts import render, HttpResponse,reverse
# Create your views here.
from app01 import models
def index(request):
    obj = models.MyUser.objects.filter(pk=1).first()
    return render(request, 'index.html', locals())
# 前端(html頁面):
{% load my_file %}
{{ obj|displayName}}

bulk_create批量插入數據

當我們使用orm來一次性新增很多表記錄的時候,等待結果的時間會非常的慢,如果一次性需要批量插入很多數據的時候就需要使用bulk_create來批量插入數據。

import random
user_list = ['用戶[{}]'.format(i) for i in range(100)]
data = []
for j in user_list:
    data.append(models.MyUser(name=j, password='123', gender=str(random.choice([1, 2, 3]))))
models.MyUser.objects.bulk_create(data)

select_related和prefetch_related

def select_related(self, *fields)
    性能相關:表之間進行join連表操作,一次性獲取關聯的數據。
    總結:
    1. select_related主要針一對一和多對一關系進行優化。
    2. select_related使用SQL的JOIN語句進行優化,通過減少SQL查詢的次數來進行優化、提高性能。
def prefetch_related(self, *lookups)
    性能相關:多表連表操作時速度會慢,使用其執行多次SQL查詢在Python代碼中實現連表操作。
    總結:
    1. 對于多對多字段(ManyToManyField)和一對多字段,可以使用prefetch_related()來進行優化。
    2. prefetch_related()的優化方式是分別查詢每個表,然后用Python處理他們之間的關系。

update()與save()的區別有哪些

看完了這篇文章,相信你對update()與save()的區別有哪些有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屯昌县| 建昌县| 双辽市| 隆安县| 永川市| 德阳市| 苍南县| 武城县| 鲜城| 沛县| 永宁县| 永寿县| 鄯善县| 四会市| 泉州市| 泊头市| 隆安县| 墨江| 弥渡县| 调兵山市| 上蔡县| 定结县| 罗田县| 怀化市| 桑植县| 康定县| 富源县| 色达县| 乐至县| 襄樊市| 平阴县| 巴林左旗| 神池县| 浑源县| 大姚县| 鄢陵县| 淮安市| 白朗县| 新密市| 油尖旺区| 吉首市|