[实验] Django 数据修改

注意:

本实验是接着 《Django 最大值、最小值、平均值等特殊数值的数据查询》而继续的

正文:

步骤一:进入相应的 Django 环境

(django_env) [root@python mysite]# python3
>>> import os,django
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'
>>> django.setup()
>>> from user.models import *

步骤二:导入数据修改 F 模块

>>> from django.db.models import Q,F

(补充:这里同时也倒入了 Q 模块,后面的实验会用到 Q 模块)

步骤三:设置一个显示上一句 SQL 语句的函数

>>> def showsql():
...     from django.db import connection
...     print(connection.queries[-1]['sql'])
... 

步骤四:进行数据修改

4.1 单独修改某 1 条数据

4.1.1 单独修改某 1 条数据
>>> Student.objects.filter(id=3).update(score=F('score')+5)
1


补充:
1) 这里以给 id 等于 3 的数据的 score 值添加 5 为例
2) 这里共修改了 1 条数据

4.1.2 显示单独修改某 1 条数据 SQL 语句
>>> showsql()
UPDATE `user_student` SET `score` = (`user_student`.`score` + 5) WHERE `user_student`.`id` = 3

(补充:这里以给 id 等于 3 的数据的 score 值添加 5 为例)

4.2 批量修改数据

4.2.1 批量修改数据
>>> Student.objects.filter(Q(id__gt=3)).update(score=F('score')+5)
3


补充:
1) 这里以给 id 大于 3 的数据的 score 值添加 5 为例
2) 这里共修改了 3 条数据

4.2.2 显示批量修改数据的 SQL 语句
>>> showsql()
UPDATE `user_student` SET `score` = (`user_student`.`score` + 5) WHERE `user_student`.`id` > 3

(补充:这里以给 id 大于 3 的数据的 score 值添加 5 为例)

补充:get 无法对获得的结果进行操作

>>> Student.objects.get(id=3).update(score=33)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'update'


补充:
1) 前面 filter 返回结果是 QuerySet,所以可以被 update 操作
2) 现在 get 的返回结果是 1 个对象,所以不能被 update 操作