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]。 

 

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