【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)

目录

    • 实现效果
    • 实现思路
    • 实现代码
    • 总结


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

数据仅供学习使用,不可商用。
【所用到的测试数据来自七麦数据的2021年12月移动应用增长榜 - 游戏】
【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第1张图片
取得了前20名的游戏的相关数据。
下载数据集

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

在这里插入图片描述

实现效果

原来是建好数据库和数据表的空表(下文提供相关sql语句)
【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第2张图片
插入数据后
【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第3张图片

【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第4张图片


实现思路

  1. 先建立数据库和数据表
数据库建表语句(主键版本,只可以导入数据一次)
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 )
);
数据库建表语句(无主键版本,可以多次导入数据)
create database mobile_game default character set utf8mb4;

use mobile_game;

CREATE TABLE tb_game (
	rank_id INT(10) UNSIGNED  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 '七麦指数'
);

【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第5张图片
【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第6张图片

  1. 读取2021年12月移动应用增长榜前20.xlsx的数据
    【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第7张图片
## 读取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)#打印看看读取了什么数据
  1. 把数据写入数据库
# 把数据写入数据库
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()  # 无论如何都要关闭连接,节省资源占用

因为前面设置了主键rank,数据只能导入一次(主键不能重复)你可以删掉原来的数据重新导入,或者一开始就不设置主键。
【Python之pymysql库学习】9.excel导入数据到数据库(保姆级图文+实现代码)_第8张图片


实现代码

下载数据集

链接: 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语句的相关知识(保姆级图文+实现代码)】
【更多内容敬请期待】


你可能感兴趣的:(python,#,python,数据库,pymysql,excel导入数据到数据库)