【Python之pymysql库学习】数据库创建-数据表增删改查-数据表导出为excel-excel导入数据到数据库-专栏合集(实现代码注释详细)


欢迎关注 『Python之pymysql库学习』 系列,持续更新中
欢迎关注 『Python之pymysql库学习』 系列,持续更新中

本专栏合集只有代码,具体的api参数解释,在专栏下面的各个文章中具体介绍。
本合集是为了给已经掌握知识的朋友们快速查阅示例使用的。

1.创建数据库

# @Time    : 2021/12/13 20:15
# @Author  : 南黎
# @FileName: 1.创建数据库.py
import pymysql
import random
#创建与数据库的连接
# 创建连接
# host      主机名字,本机一般都是localhost
# user      用户名
# password  用户密码
# charset   数据库编码
conn = pymysql.connect(host='localhost',user='root',password='root',charset='utf8mb4')
# 创建游标
cursor = conn.cursor()
# 创建数据库的sql(使用if判断是否已经存在数据库,数据库不存在时才会创建,否则会报错)
sql = "CREATE DATABASE IF NOT EXISTS new_db"#new_db是要创建的数据库名字

# 执行创建数据库的sql语句
cursor.execute(sql)

2.创建数据表

# @Time    : 2021/12/14 20:01
# @Author  : 南黎
# @FileName: 2.创建数据表.py
import pymysql
try:
    #创建与数据库的连接
    #参数分别是 指定本机 数据库用户名 数据库密码 数据库名 端口号 autocommit是是否自动提交(非常不建议,万一出问题不好回滚)
    db=pymysql.connect(host='localhost',user='root',password='root',database='python',port=3306,autocommit=False)
    #创建游标对象cursor
    cursor=db.cursor()
    #使用execute()方法执行sql,如果表存在则删除
    cursor.execute('drop table if EXISTS student')
    #创建表的sql
    sql='''
        create table student(
        sno int(8) primary key auto_increment,
        sname varchar(30) not null,
        sex varchar(5) ,
        age int(2),
        score float(3,1)
        )
    '''
    cursor.execute(sql)
except:
    print('创建表失败')
finally:
    #关闭数据库连接
    db.close()

3.数据表插入单条数据

# @Time    : 2021/12/14 20:06
# @Author  : 南黎
# @FileName: 3.数据表插入单条数据.py
import pymysql
import random
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306)
#创建游标对象cursor
cursor=db.cursor()
#插入sql语句
sql='''
    insert into student(sname,sex,age,score) values(%s,%s,%s,%s)
'''
try:
    #执行sql语句
    cursor.execute(sql,('李四','woman',25,random.randint(60,100)))
    #提交事务
    db.commit()
    print('插入成功')
except Exception as e:
    print(e)
    #如果出现异常,回滚
    db.rollback()
    print('插入失败')
finally:
    #关闭数据库连接
    db.close()


4.数据表插入多条数据

# @Time    : 2021/12/14 20:08
# @Author  : 南黎
# @FileName: 4.数据表插入多条数据.py
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306)
#创建游标对象cursor
cursor=db.cursor()
#插入sql语句
sql='''
    insert into student(sname,sex,age,score) values(%s,%s,%s,%s)
'''
add_data_list=[('王朝','man',25,94.6),('马汉','man',27,91.1)]#把数据以列表形式批量插入
try:
    #执行sql语句
    cursor.executemany(sql,add_data_list)
    #提交事务
    db.commit()
    print('插入多条数据成功')
except Exception as e:
    print(e)
    #如果出现异常,回滚
    db.rollback()
    print('插入多条数据失败')
finally:
    #关闭数据库连接
    db.close()


5.数据表更新

# @Time    : 2021/12/14 20:12
# @Author  : 南黎
# @FileName: 5.数据表更新.py
import pymysql
import random

# 创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
# 创建游标对象cursor
cursor = db.cursor()

sql = 'update student set score=%s where sno=%s'

try:
    # 执行sql
    # 将sno=3的学生成绩修改为80-100之间的随机数
    cursor.execute(sql, (random.randint(80, 100), 3))
    # 提交数据
    db.commit()
    print('修改成功')
except:
    print('修改失败')
    db.rollback()
finally:
    db.close()


6.数据库删除操作

# @Time    : 2021/12/14 20:25
# @Author  : 南黎
# @FileName: 6.数据库删除操作.py
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
#创建游标对象cursor
cursor=db.cursor()
#删除sql
#删除成绩小于90的学生
sql='delete from student where score < 90'
try:
    #执行sql语句
    cursor.execute(sql)
    #提交事务
    db.commit()
    print('删除数据成功')
except:
    db.rollback()
    print('删除数据失败')
finally:
    #关闭连接
    db.close()


7.数据表查询操作

# @Time    : 2021/12/14 20:09
# @Author  : 南黎
# @FileName: 7.数据表查询操作.py
# 查询学生 年龄大于等于23的所有学生信息
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
#创建游标对象cursor
cursor=db.cursor()
#查询年龄大于等于23的所有学生信息
sql='select * from student where age>=23'
try:
    #执行sql
    cursor.execute(sql)
    #获取查询结果
    results=cursor.fetchall()
    print(type(results))
    print(results)
    for row in results:
        sno=row[0]
        sname=row[1]
        sex=row[2]
        age=row[3]
        score=row[4]
        #输出
        print('sno:',sno,'sname:',sname,'sex:',sex,'age:',age,'score:',score)
except Exception as e:
    print(e)
    print('查询失败')
finally:
    db.close()


8.数据库导出数据为excel文件

# @Time    : 2022/1/16 12:46
# @Author  : 南黎
# @FileName: 8.数据库导出数据为excel文件.py
import pymysql
import openpyxl  # 用户操作excel的库

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='python',
    port=3306,
    autocommit=False,
    charset="utf8mb4"
)
#从数据库中读取到学生的sno,sname,sex,age,score并放入数据库
try:
    with conn.cursor() as cursor:#创建游标,在这里conn.cursor()==cursor
        cursor.execute(
            'select sno,sname,sex,age,score from student'
        )
        excel_workbook=openpyxl.Workbook()#创建一个excel工作簿
        # excel_sheet=excel_workbook.create_sheet("学生成绩表")#在工作簿中建立一个工作学生成绩表,作为当前要写入内容的表
        excel_sheet=excel_workbook.active #使用默认的sheet表,不新建表,切换当前把数据写入此表
        #注意数据量比较少的时候用fetchall(),一行一行的读取,这里数据量少就直接fetchall()了

        # openpyxl操作excel是,行和列的索引从1开始,所以要+1, col_id, col_name表示索引和索引内容
        for col_id, col_name in enumerate(['sno','sname','sex','age','score']):#列索引,读取那些列的数据
            excel_sheet.cell(1,col_id+1,col_name)#往单元格写入数据,第1列表格的表头'sno','sname','sex','age','score'写入
        # 写入数据
        for row_id,row_emp in enumerate(cursor.fetchall()):#获得每一行的数据
            for col_id,col_value in enumerate(row_emp):#把每一行的每一列写入,加2是因为原先表头+1的基础上,再加上表头这一行,所以要+1+1=+2
                excel_sheet.cell(row_id+2,col_id+1,col_value)
    excel_workbook.save("读取到的学生成绩.xlsx")
except pymysql.MySQLError as err:#捕获异常
    print(err)#如果出现异常,打印错误信息
finally:
    conn.close()#无论如何都要关闭连接,节省资源占用

9.excel导入数据到数据库

下载数据集

链接: https://pan.baidu.com/s/1ezbvTRXB4A2nwVoEO_1PBA?pwd=xq5q 
提取码: xq5q 复

在这里插入图片描述

# @Time    : 2022/1/16 12:46
# @Author  : 南黎
# @FileName: 9.excel导入数据到数据库.py
import pymysql
import openpyxl  # 用户操作excel的库

# 先执行创建数据库和数据表的sql语句,确保已经有了数据库和数据表
# CREATE DATABASE mobile_game DEFAULT CHARACTER SET utf8mb4;
# USE mobile_game;
# CREATE TABLE tb_game (
# 	rank_id INT ( 10 ) UNSIGNED auto_increment COMMENT 'rank_id',
# 	app_id VARCHAR ( 25 ) NOT NULL COMMENT '应用id',
# 	app_NAME VARCHAR ( 25 ) NOT NULL COMMENT '应用名称',
# 	class VARCHAR ( 25 ) NOT NULL COMMENT '应用类别',
# 	Company_NAME VARCHAR ( 25 ) NOT NULL COMMENT '公司名',
# 	score FLOAT NOT NULL COMMENT '七麦指数',
# PRIMARY KEY ( rank_id )
# );


## 读取2021年12月移动应用增长榜前20.xlsx的数据
excel_workbook=openpyxl.load_workbook("2021年12月移动应用增长榜前20.xlsx")#创建一个excel工作簿
excel_sheet = excel_workbook.active  # 使用默认的sheet表,不新建表,切换当前把数据写入此表
excel_data=[]#所有数据的列表
#从第二行第一列开始取得数据,不需要第一行表头的数据
#注意行列数在openpyxl库中是从0开始计数的,max_row是所有数据的行数20,我们要的是第2行到第21行
for row_id in range(2,excel_sheet.max_row+1):
    values=[]#这一行数据的列表
    for col_id in range(1,excel_sheet.max_column+1):
        values.append(excel_sheet.cell(row_id,col_id).value)
    print(values)
    excel_data.append(values)#实现的2层的列表嵌套
# print(excel_data)#打印看看读取了什么数据

# 把数据写入数据库
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='mobile_game',
    port=3306,
    autocommit=False,
    charset="utf8mb4"
)

try:
    with conn.cursor() as cursor:
        #cursor.executemany表示批量插入数据,批处理
        cursor.executemany(
            'insert into tb_game'
            '(rank_id,app_id ,app_NAME,class,Company_NAME,score)'
            'values'
            '(%s,%s,%s,%s,%s,%s)',
        excel_data
        )
    conn.commit()
    print("导入成功!")
except pymysql.MySQLError as err:  # 捕获异常
    print(err)  # 如果出现异常,打印错误信息
    print("导入失败!")
finally:
    conn.close()  # 无论如何都要关闭连接,节省资源占用

总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python知识!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-1-15

欢迎关注 『Python之pymysql库学习』 系列,持续更新中
欢迎关注 『Python之pymysql库学习』 系列,持续更新中
【1.创建数据库(保姆级图文+实现代码)】
【2.创建数据表(保姆级图文+实现代码)】
【3.数据表插入单条数据(保姆级图文+实现代码)】
【4.数据表插入多条数据(保姆级图文+实现代码)】
【5.数据表更新(保姆级图文+实现代码)】
【6.数据库删除操作(保姆级图文+实现代码)】
【7.数据表查询操作(保姆级图文+实现代码)】
【8.数据库导出数据为excel文件(保姆级图文+实现代码)】
【9.excel导入数据到数据库(保姆级图文+实现代码)】
【数据库创建-数据表增删改查-数据表导出为excel-excel导入数据到数据库-专栏合集(实现代码注释详细)】
【一、分析fetchone()、fetchmany()、fetchall()(保姆级图文+实现代码)】
【二.游标cursor的相关知识(保姆级图文+实现代码)】
【三.sql语句的相关知识(保姆级图文+实现代码)】
【更多内容敬请期待】


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值