Python基础学习2

多进程

子进程创建默认导入父进程代码。子进程的模块名不是main。注意使用if __name__ == '__main__'语句。

多进程之间默认不共享变量,将公共变量复制,各自拥有各自的变量。
代码:

from multiprocessing import Process

num=0

def run1():
    global num
    num = num + 10
    print('run1:',num)

def run2():
    global num
    num = num + 1
    print('run2',num)


if __name__ =="__main__":
    p1=Process(target=run1)
    p1.start()
    p1.join(10)

    p2=Process(target=run2)
    p2.start()
    p2.join()

    print('main',num)

结果:

run1: 10
run2 1
main 0

TFTP

格式要求:
读写请求:操作码(1:下载/2:上传)【2bytes】,文件名【n bytes】,0【1 byte】,模式【n nytes】,0【1 byte】。
数据包:操作码(3)【2 bytes】,块编号【2 bytes】,数据【512 bytes】
ACK:操作码(4)【2 bytes】,块编号【2 bytes】
ERROR:操作码(5)【2 bytes】,差错码【2 bytes】,差错信息【n bytes】,0【1 byte】。

格式解析:
!:解析的固定开头
H:表示两个字节
b:表示一个字节
xxs:表示xx个字节,xx是数字

'''
使用tftpd64作为服务器。
下载大鸭鸭的图片
'''
import struct
from socket import *
filename = 'ruya.png'
server_ip='192.168.31.70'
send_data=struct.pack('!H{0}sb5sb'.format(len(filename)),1,filename.encode(),0,'octet'.encode(),0)      #下载请求
s=socket(AF_INET,SOCK_DGRAM)
s.sendto(send_data,(server_ip,69))      #发送下载请求至服务器
f=open(filename,'ab')

while True:
    recv_data = s.recvfrom(1024)#接收数据
    #print(recv_data)    #recv_data是【数据,(ip地址,算口号)元组】的格式,数据的前两位是操作码,
    caozuoma,ack_num=struct.unpack('!HH',recv_data[0][:4])# 获取数据块编号
    #print(recv_data[0][0:4])       #recv_datad 中传输的数据的前四个字节是操作码和块编号,
    rand_port = recv_data[1][1]#获取服务器的随机端口
    if int(caozuoma)==5:
        print('文件不存在...')
        break
    print('操作码:{0},ACK:{1},服务器随机端口:{2},数据长度{3}'.format(caozuoma,ack_num,rand_port,len(recv_data[0][4:])))
    f.write(recv_data[0][4:])
    if len(recv_data[0])<516:
        break
    ack_data=struct.pack('!HH',4,ack_num)
    s.sendto(ack_data,(server_ip,rand_port))#回复ack确认包


MySQL

约束

非空约束

添加非空约束:(非空约束只能是列级约束)
alter table student modify name varchar(20) not null;
修改name字段类型为varchar(20),并添加非空约束。

删除非空约束
bash alter table student modify sex varchar(2);
修改sex字段类型为varchar(20),不写not null,即默认可为空。

默认值约束

只能用列级约束。
create table 表名(
字段名 字段类型 default value,
)

创建默认值约束代码:

mysql> create table student2(
    -> id int,
    -> name varchar(20),
    -> sex varchar(1) default '男'
    -> );
    
mysql> desc student2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(1)  | YES  |     ||       |
+-------+-------------+------+-----+---------+-------+

mysql> insert into student2 (id,name) values(3,'wang');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student2;
+------+------+------+
| id   | name | sex  |
+------+------+------+
|    3 | wang ||
+------+------+------+
1 row in set (0.00 sec)

自动增长约束

某个字段的值会自动增长
一个表中只有唯一字段。
一般配合主键使用,适用于整数int类型。
默认初始值为1,每增加一条记录,该字段值增加1。

外键约束

某表中某字段的值依赖于另一张表中某字段的值。

实现了数据库的参照完整性。
将两张表紧密结合,对某张表修改删除时,保持数据的完整性。

需使用表级约束添加。

create table 表名(
字段名 字段类型,
[constraint 外键约束名称] foreign key(字段名) references 表(字段名)
);

删除外键约束:
alter table 表名 drop foreign key 外键约束名;

索引

可分为普通索引、主键索引、非空索引、全文索引、空间索引、复合索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值