django中更新數據的幾種方法比較

django中如果需要更新數據,有多種方法:

    user = Test.objects.filter(name='張小腿')[0]
    user.phone = '18822221111'
    user.save()

    user = Test.objects.get(name='張小腿')
    user.phone = '18822221111'
    user.save()

    Test.objects.filter(name='張小腿').update(phone='18822221111')

我們就看看django在此時做了哪些處理:

使用   connection.queries   可以看到django中執行的所有mysql語句:

    from django.db import connection

    user = Test.objects.filter(name='張小腿')[0]
    user.phone = '18822221111'
    user.save()

    user = Test.objects.get(name='張小腿')
    user.phone = '18822221111'
    user.save()

    Test.objects.filter(name='張小腿').update(phone='18822221111')

    print(connection.queries)

可以看到此時的返回值:

[{u'time': u'0.000', u'sql': u'SET SQL_AUTO_IS_NULL = 0'}, {u'time': u'0.000', u'sql': u'SET SQL_AUTO_IS_NULL = 0'}, {u'time': u'0.001', u'sql': u"SELECT `test_name`.`id`, `test_name`.`phone`, `test_name`.`name`, `test_name`.`item1`, `test_name`.`item2` FROM `test_name` WHERE `test_name`.`name` = '\u5f20\u5c0f\u817f' LIMIT 1"}, {u'time': u'0.000', u'sql': u"UPDATE `test_name` SET `phone` = '18822221111', `name` = '\u5f20\u5c0f\u817f', `item1` = '222', `item2` = '111' WHERE `test_name`.`id` = 1"}, {u'time': u'0.001', u'sql': u"SELECT `test_name`.`id`, `test_name`.`phone`, `test_name`.`name`, `test_name`.`item1`, `test_name`.`item2` FROM `test_name` WHERE `test_name`.`name` = '\u5f20\u5c0f\u817f'"}, {u'time': u'0.001', u'sql': u"UPDATE `test_name` SET `phone` = '18822221111', `name` = '\u5f20\u5c0f\u817f', `item1` = '222', `item2` = '111' WHERE `test_name`.`id` = 1"}, {u'time': u'0.000', u'sql': u"UPDATE `test_name` SET `phone` = '18822221111' WHERE `test_name`.`name` = '\u5f20\u5c0f\u817f'"}]

我們理一下,其中有5條sql語句:

u"SELECT `test_name`.`id`, `test_name`.`phone`, `test_name`.`name`, `test_name`.`item1`, `test_name`.`item2` FROM `test_name` WHERE `test_name`.`name` = '張小腿' LIMIT 1"

u"UPDATE `test_name` SET `phone` = '18822221111', `name` = '張小腿', `item1` = '222', `item2` = '111' WHERE `test_name`.`id` = 1"



u"SELECT `test_name`.`id`, `test_name`.`phone`, `test_name`.`name`, `test_name`.`item1`, `test_name`.`item2` FROM `test_name` WHERE `test_name`.`name` = '張小腿'"

u"UPDATE `test_name` SET `phone` = '18822221111', `name` = '張小腿', `item1` = '222', `item2` = '111' WHERE `test_name`.`id` = 1"



u"UPDATE `test_name` SET `phone` = '18822221111' WHERE `test_name`.`name` = '張小腿'"

可以看到,前兩種方法均爲select之後,update所有字段,包括並沒有更新的字段,區別是使用get時有limit 1的限制,僅會取到1條數據。

而使用.update方法則省去了select過程,效率最高。

所以結論:

在django中,

如果需要更新數據,請一定要使用 .update 方法;

如果需要取出第一條object對象,請一定要使用 .get 方法,而不是.filter[0]。 

 

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