PyMySQL

模块安装

  • 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(主键)、工资日、工号、基本工资、奖金
初始化数据库
  1. 安装mariadb-server或Mysql
  2. 创建库

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值