【超详细】用Python行云流水地操作Excel和数据库

前言

本想就着这个机会学习下Java读取Excel的,奈何搜了一圈,发现还是Pandas最为简单明了。打算先就Python写一版,后面在学习时可能还会发一篇《用Java优雅地操作Excel和数据库》。

准备工作

软件包

关于软件安装和环境配置,网上有成堆的教程,此处不再赘述。
大体上需要用到的软件就以下几款:

  1. Anaconda(建议用Anaconda里的jupyter notebook,如果喜欢PyCharm也可以,当然也可以只用Python)
  2. Python(Anaconda和PyCharm都内置,如果只有Python也可)
  3. MySQL(不多说了,免费)

数据

数据只要随便找一个Excel文件,自己建一个Excel文档(不论是.xls还是.xlsx后缀都可以),并随便写一些内容,保存为 成绩单.xlsx。

Pandas读取Excel文件

import pandas as pd  # 如果没有安装pandas报错,直接在jupyter里面运行后述语句 !pip install pandas
df = pd.read_excel(r"C:\Users\Administrator\Desktop\成绩单.xlsx")  # 读取test.xlsx的sheet1,并以第一行作为Dataframe的标题头
df.head()  # 查看表格内容概况

创建数据库

打开MySQL,创建数据库students

# 创建数据库
create database students;
# 使用数据库
use database;
# 查看数据表,这个时候是空数据库
show tables;

创建数据表

create table `students` (`id` int not null auto_increment primary key, `student_id` varchar(255) comment '学号', `name` varchar(255) comment '姓名', `results` int comment '成绩');

注:创建数据表有两种方式,一种是在MySQL中先创建好数据表,并定义好数据字段的名称、属性,然后再用Pandas进行导入,若属性不符则导入失败;另一种是直接用Pandas在导出的同时创建数据表,这样导出的数据表字段属性都为TEXT,然后根据需要更改数据字段属性。

将记录导入数据库

调用Pandas.io.sql.to_sql()方法,其中if_exists控制重复记录是替换还是追加。

from sqlalchemy import create_engine
# 建立连接,username替换为用户名,passwd替换为密码,students替换为数据库名
conn = create_engine('mysql+pymysql://username:passwd@localhost:3306/students',encoding='utf8')
# 以df中的header为标题,写入数据库,test替换为数据表名
pd.io.sql.to_sql(df, "students", conn, if_exists='append', index=False)

一般这时候会报错,因为Pandas里面的字段名称和数据库里的字段名称不一致

修改df里面的标题(几种重命名的方式汇总 https://blog.csdn.net/littleRpl/article/details/100117428)

df.rename(columns={'学号':'student_id',
                  '姓名':'name',
                  '成绩':'results'},inplace=True)


再次尝试写入,成功。我们直接查询student数据表

使用PyMySQL连接数据库进行增删改查

连接数据库

import pymysql
db = pymysql.connect(host="127.0.0.1", user="root", database="students", passwd="root")  # 主机名,用户名,数据库名称,密码

查询操作

cursor = db.cursor()
# 编写查询语句
sql = "SELECT * FROM test;"
# 执行查询语句
cursor.execute(sql)
# 获取查询结果
result = cursor.fetchall()

可以看到返回的是一个二维元组

增删改操作

新增记录

insert_sql = "INSERT INTO students (student_id, name, results) values ('Y031', 'Jack', 99);"
cursor.execute(insert_sql)
db.commit()

更新记录

update_sql = "update students set student_id='Y006' where student_id='Y031';"
cursor.execute(update_sql)
db.commit()

删除记录(不建议,一般使用逻辑删除,即新增一个is_delete字段,然后update这个字段)

同样的也是套用上面的模板进行操作,读者可以自行尝试。
这里稍微讲一下逻辑删除的原理,由于我进行了一次物理删除,导致自增id跳过6到了7.
如果是逻辑删除,先修改表结构新增is_delete字段

更新指定主键的记录的is_delete属性为1,查询的时候加上限定条件。

结语

通过Python操作数据库和Excel文件,以Pandas为桥梁,就可以快速进行Excel数据分析,Pandas数据处理,MySQL数据库存储,实现全流程自动化操作。通过数据库连接Web开发组件,Pandas连接机器学习,Excel导出统计报表,实现一站式编程。

posted @ 2021-02-23 15:43  YHJIN  阅读(785)  评论(0编辑  收藏  举报