模块安装
- python丰富多样的功能都存放到了不同的模块中
- python基本安装只安装了很少一部分的模块
- 大量的模块,需要单独安装
- python软件包的官方站点:https://pypi.org/
- 采用官方站点安装有可能速度慢,可以改为国内镜像站点
[root@localhost ~] mkdir ~/.pip
[root@localhost ~] vim ~/.pip/pip.conf
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
- 安装软件包
# 在线安装
[root@localhost ~] pip3 install wget # 安装wget包
[root@localhost ~] pip3 install pymysql # 安装pymysql包
# 本地安装
[root@localhost ~] pip3 install zzg_pypkgs/pymysql_pkgs/*
如果提示pip版本过低,也可以在线升级pip
[root@localhost ~] pip3 install --upgrade pip
-
数据库中需要记录的字段有:
工号、姓名、生日、性别、联系方式、部门、工资日、基本工资、奖金、总工资
数据库表的设计
- 数据库应该尽量避免数据冗余
- 可以通过将字段放到不同表的方式来消除冗余
- 数据库设计指导原则是数据库范式
- 关系型数据库至少要满足3NF的要求,否则无法称为关系型数据库
- 所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域
都应该是原子性的,即数据库表的每一列都是不可分割的原子项。联系方式不具有>原子性,应该再分为家庭住址、手机号、email等各项 - 满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据
库表中的每个实例或记录必须可以被唯一地区分。简单来说,就是每张表都需要有>一个主键。 - 满足第三范式(3NF)必须满足第二范式(2NF)。任何非主属性,不能依赖其>他非主属性。总工资是由基本工资和奖金计算得来的,所以数据库中就不应该存储>总工资这一项,而是需要时计算它。
- 根据以上原则,最终可以确定3张表:
- 员工表:工号(主键)、姓名、email、部门ID
- 部门表:部门ID(主键)、部门名
- 工资表:id(主键)、工资日、工号、基本工资、奖金
初始化数据库
- 安装mariadb-server或Mysql
- 创建库
PyMySQL应用
'''创建表'''
import pymysql
#建立到数据库的连接
conn = pymysql.connect(
host='192.168.4.52', port=3306, user='root',
password='123456', db='mydb', charset='utf8'
)
#创建游标
cur = conn.cursor()
#编写sql语句
create_dep = '''create table departments(
dep_id int, dep_name varchar(20), primary key (dep_id)
)'''
create_emp = '''create table employees(
emp_id int, emp_name varchar(20), email varchar(50),
dep_id int, primary key (emp_id), foreign key (dep_id) references departments(dep_id)
)'''
create_sal = '''create table salary(
id int, date date, emp_id int, basic int , awards int ,
primary key(id), foreign key(emp_id) references employees(emp_id)
)'''
#通过游标执行sql语句
cur.execute(create_dep)
cur.execute(create_emp)
cur.execute(create_sal)
#关闭
cur.close()
conn.close()
'''增删改查'''
import pymysql
#建立到数据库的连接
conn = pymysql.connect(
host='192.168.4.52', port=3306, user='root',
password='123456', db='mydb', charset='utf8'
)
#创建游标
cur = conn.cursor()
#编写sql语句
#增
insert_dep = 'insert into departments values (%s, %s)'
cur.execute(insert_dep, (1, '人事部'))
cur.executemany(
insert_dep,
[(2, '运维部'), (3, '开发部'), (4, '测试部'), (5, '市场部'), (6, '财务部')]
)
#查
select1 = 'select * from departments'
cur.execute(select1)
decord1 = cur.fetchone() #取出第一条查询结果
print(decord1)
decord2 = cur.fetchmany(2) #继续取出两条查询结果
print(decord2)
decord3 = cur.fetchall() #继续取出剩余所有结果
print(decord3)
#改
update1 = 'update departments set dep_name=%s where dep_name=%s'
cur.execute(update1, ('人力资源部', '人事部'))
#删
delete1 = 'delete from departments where dep_id=%s'
cur.execute(delete1, (6, ))
#确认
conn.commit()
#关闭
cur.close()
conn.close()