前言:环境:windows10,python版本3.8
今天得空,写一篇关于python连接数据库查询数据,并且导出为excel表格的文章,话不多说,进入正题。
前期准备:
1、连接mysql数据库,导出到excel的功能,需要用到两个第三方的包,pymysql和xlwt,如果没有安装,则cmd进入python的安装目录下的scripts目录,如下:
使用pip install pymysql和pip install xlwt来安装,如果没有安装pip,则请先安装pip
2、准备数据库test和数据表user:
sql:
/* Navicat MySQL Data Transfer Source Server : 本地 Source Server Version : 80016 Source Host : localhost:3306 Source Database : test Target Server Type : MYSQL Target Server Version : 80016 File Encoding : 65001 Date: 2020-08-12 10:28:57 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL COMMENT '主键id', `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户姓名', `count` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('0', 'name0', '34'); INSERT INTO `user` VALUES ('1', 'name1', '25'); INSERT INTO `user` VALUES ('2', 'name2', '78'); INSERT INTO `user` VALUES ('3', 'name3', '1'); INSERT INTO `user` VALUES ('4', 'name4', '23'); INSERT INTO `user` VALUES ('8', 'name8', '146'); INSERT INTO `user` VALUES ('9', 'name9', '34'); INSERT INTO `user` VALUES ('10', 'name10', '89'); INSERT INTO `user` VALUES ('11', 'name11', '0'); INSERT INTO `user` VALUES ('12', 'name12', '12'); INSERT INTO `user` VALUES ('13', 'name13', '76'); INSERT INTO `user` VALUES ('16', 'name16', '143'); INSERT INTO `user` VALUES ('17', 'name17', '121'); INSERT INTO `user` VALUES ('18', 'name18', '56'); INSERT INTO `user` VALUES ('19', 'name19', '16');
使用VSCode作为编辑器,编写代码如下: # -- coding:utf-8 导入数据到excel -- import xlwt import pymysql def export_excel(table_name): 连接数据库,查询数据 host, user, passwd, db = '127.0.0.1', 'root', 'password', 'test' conn = pymysql.connect(host=host,port=3306,user=user,passwd=passwd,db=db,charset='utf8') cur = conn.cursor() sql = 'select * from %s' % table_name cur.execute(sql) 获取所有字段名 fields = [field[0] for field in cur.description] 获取所有数据 all_data = cur.fetchall() 写入excel book = xlwt.Workbook() sheet = book.add_sheet('name') for col,field in enumerate(fields): sheet.write(0,col,field) row = 1 for data in all_data: for col,field in enumerate(data): sheet.write(row,col,field) row += 1 book.save("%s.xls" % table_name) if name == 'main': export_excel('user')
在终端中执行即可得到excel:
数据和user表中的一致,操作成功。
上述代码需要注意的点:
1、文件头部表示coding:utf-8;
2、数据库连接信息中charset使用的是utf8,没有短横杠(-);
3、没有出现中文字符;