内容一:给一个硬盘分区
# fdisk /dev/sda
(补充:这里以给 /dev/sda 硬盘分区为例,键入以上命令之后,可以根据提示进行分区操作)
内容二:显示已有分区情况
# fdisk -l
# fdisk /dev/sda
(补充:这里以给 /dev/sda 硬盘分区为例,键入以上命令之后,可以根据提示进行分区操作)
# fdisk -l
使用方法:
1. 将第一个脚本命名为 test_main.py,将第二个脚本命名为 test_sub.py,并将它们放在同一个目录下
2. 给两个脚本添加执行权限
3. 用 python3 命令执行第一个脚本
import subprocess
test=subprocess.Popen(['python3', './test_sub.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out=test.decode().strip()
print(out)
def sum(a,b):
return(a + b)
c = 4
b = 2
print(sum(c,b))
本实验是接着 《Django 自定义逻辑添加(通过自定义 save 对象实现)(一次性完成多对多表数据的插入)》而继续的
将 mysite/user/models.py 中的以下内容:
class Clazz(models.Model):
cname = models.CharField(max_length=30)
class Student(models.Model):
sname = models.CharField(max_length=30)
score = models.PositiveBigIntegerField()
cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)
def __str__(self):
return u'Student:%s,%s'%(self.sname,self.score)
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
try:
self.cls = Clazz.objects.get(cname=self.cls.cname)
except Clazz.DoesNotExist:
self.cls = Clazz.objects.create(cname=self.cls.cname)
#Insertion of student table
models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)
修改为:
class Clazz(models.Model):
cname = models.CharField(max_length=30)
class Student(models.Model):
sname = models.CharField(max_length=30)
score = models.PositiveBigIntegerField()
cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)
def __str__(self):
return u'Student:%s,%s'%(self.sname,self.score)
from django.db.transaction import atomic
@atomic
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
try:
self.cls = Clazz.objects.get(cname=self.cls.cname)
except Clazz.DoesNotExist:
self.cls = Clazz.objects.create(cname=self.cls.cname)
#Insertion of student table
models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)
本实验是接着 《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 *
>>> from django.db.models import Q,F
(补充:这里同时也倒入了 Q 模块,后面的实验会用到 Q 模块)
>>> def showsql():
... from django.db import connection
... print(connection.queries[-1]['sql'])
...
>>> Student.objects.filter(id=3).update(score=F('score')+5)
1
(
补充:
1) 这里以给 id 等于 3 的数据的 score 值添加 5 为例
2) 这里共修改了 1 条数据
)
>>> showsql()
UPDATE `user_student` SET `score` = (`user_student`.`score` + 5) WHERE `user_student`.`id` = 3
(补充:这里以给 id 等于 3 的数据的 score 值添加 5 为例)
>>> Student.objects.filter(Q(id__gt=3)).update(score=F('score')+5)
3
(
补充:
1) 这里以给 id 大于 3 的数据的 score 值添加 5 为例
2) 这里共修改了 3 条数据
)
>>> showsql()
UPDATE `user_student` SET `score` = (`user_student`.`score` + 5) WHERE `user_student`.`id` > 3
(补充:这里以给 id 大于 3 的数据的 score 值添加 5 为例)
>>> 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 的返回结果是一个对象,所以不能被 update 操作
)
本实验是接着 《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 *
>>> from django.db.models import Q
>>> def showsql():
... from django.db import connection
... print(connection.queries[-1]['sql'])
...
>>> Student.objects.filter(Q(sname='lisi')&Q(score=80))
<QuerySet [<Student: Student:lisi,80>]>
(
补充:
1) 这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件的数据为例
2) 这里共查询到了 1 条数据
)
>>> showsql()
SELECT `user_student`.`id`, `user_student`.`sname`, `user_student`.`score`, `user_student`.`cls_id` FROM `user_student` WHERE (`user_student`.`sname` = 'lisi' AND `user_student`.`score` = 80) LIMIT 21
(补充:这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件的数据为例)
>>> Student.objects.filter(sname='lisi',score=80)
<QuerySet [<Student: Student:lisi,80>]>
(
补充:
1) 这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件的数据为例
2) 这里共查询到了 1 条数据
)
>>> showsql()
SELECT `user_student`.`id`, `user_student`.`sname`, `user_student`.`score`, `user_student`.`cls_id` FROM `user_student` WHERE (`user_student`.`score` = 80 AND `user_student`.`sname` = 'lisi') LIMIT 21
(补充:这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件的数据为例)
>>> Student.objects.filter(Q(sname='zhangsan')|Q(score=90))
<QuerySet [<Student: Student:zhangsan,60>, <Student: Student:wangwu,90>]>
(
补充:
1) 这里以查询同时满足 sname=’lisi’ 条件或 score=90 条件的数据为例
2) 这里共查询到了 1 条数据
)
>>> showsql()
SELECT `user_student`.`id`, `user_student`.`sname`, `user_student`.`score`, `user_student`.`cls_id` FROM `user_student` WHERE (`user_student`.`sname` = 'zhangsan' OR `user_student`.`score` = 90) LIMIT 21
(补充:这里以查询同时满足 sname=’lisi’ 条件或 score=90 条件的数据为例)
>>> Student.objects.filter(~Q(sname='zhangsan'))
<QuerySet [<Student: Student:lisi,80>, <Student: Student:wangwu,90>, <Student: Student:zhaoliu,70>, <Student: Student:xueer,70>, <Student: Student:huangyi,70>]>
(
补充:
1) 这里以查询 sname=’zhangsan’ 条件不成立的数据为例
2) 这里共查询到了 5 条数据
)
>>> showsql()
SELECT `user_student`.`id`, `user_student`.`sname`, `user_student`.`score`, `user_student`.`cls_id` FROM `user_student` WHERE NOT (`user_student`.`sname` = 'zhangsan') LIMIT 21
(补充:这里以查询 sname=’zhangsan’ 条件不成立的数据为例)
>>> Student.objects.filter(~Q(sname='zhangsan',score=90))
<QuerySet [<Student: Student:zhangsan,60>, <Student: Student:lisi,80>, <Student: Student:wangwu,90>, <Student: Student:zhaoliu,70>, <Student: Student:xueer,70>, <Student: Student:huangyi,70>]>
(
补充:
1) 这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件不成立的数据为例
2) 这里共查询到了 1 条数据
)
>>> showsql()
SELECT `user_student`.`id`, `user_student`.`sname`, `user_student`.`score`, `user_student`.`cls_id` FROM `user_student` WHERE NOT (`user_student`.`score` = 90 AND `user_student`.`sname` = 'zhangsan') LIMIT 21
(补充:这里以查询同时满足 sname=’lisi’ 条件和 score=80 条件不成立的数据为例)