本篇文章是通过pymysql将本地数据库中的指定表格保存到excel的操作。
这里我们假设本地已经安装了对应的数据库管理工具,里面有一个指定的表格,现在通过python程序,通过调用pymysql进行读取并保存到excel中。
关于数据库管理工具是Navicat Premium
我们所使用的数据库管理工具是Navicat Premium,它支持多种数据库系统,包括 MySQL, PostgreSQL, Oracle, SQLite, SQL Server, MariaDB 以及云数据库服务,例如 Amazon RDS, Amazon Aurora, Amazon Redshift, SQL Azure, Oracle Cloud 和 Google Cloud。Navicat Premium 提供了一个直观的用户界面使得数据库管理变得简单,即便是非专业人士也可以容易上手。
通过这款软件,用户可以进行各种数据库相关操作,如设置和维护数据库、进行数据迁移、备份和还原、建立和运行 SQL 查询、监控数据库的健康状况、优化数据库性能等。除了基本的数据编辑和浏览功能,Navicat Premium 还具备高级特性,比如数据传输、数据同步、结构同步、报告生成工具等。
读取数据库并保存
前期准备,自然我们是要在有一个类似于Navicat Premium 的数据库管理工具,并在里面建一个数据库,数据库中有一个名为 book_type的表。
该表中的内容如下:
现在我们通过pymysql来读取该表的信息。这里我们先用程序进行显示:
import openpyxl
import pymysql# 从数据库某个表中取出所有记录
# 参数host指定数据库服务器的IP地址,参数db_name指定数据库的名字,
# 参数table_name指定表的名字
# 参数user指定数据库的登录用户名,参数passwd指定登录用户的密码
def get_data(host, db_name, table_name, user, passwd):# 生成一个数据库的连接conn = pymysql.connect(host=host, port=3306, database=db_name, user=user, passwd=passwd)# 建立一个游标cur = conn.cursor()# 组合一个SQL查询语句sql = 'select * from ' + table_name# 执行SQL语句cur.execute(sql)# rows取得记录,cur.fetchall()返回所有符合条件的记录rows = cur.fetchall()# cur.description返回数据表的字段信息,# 返回值fields是一个元组,其中的每一项元素也是一个元组(子元组),# 这个子元组的第一个元素是字段名fields = cur.description# 关闭游标cur.close()# 断开连接conn.close()return fields, rows# 将表的记录导入到Excel中的函数
# 参数host指定数据库服务器的IP地址,参数db_name指定数据库的名字,
# 参数table_name指定表的名字,参数user指定数据库的登录用户名,
# 参数passwd指定登录用户的密码,参数filename指定导入的Excel文件名
def export_to_excel(fields, table_rows, filename):# 调用函数,取得数据表的字段信息和记录信息# 生成Excel文件的工作簿workbook = openpyxl.Workbook()# 在工作簿中生成一个工作表,表名设为"table_"加数据表名sheet = workbook.create_sheet('table_' + table_name, 0)# 在工作表第1行上写上字段名for i in range(0, len(fields)):# 在openpyxl模块中定义工作表的行始值是1,列起始值是1,# 所以cell()函数第1个参数是1表示第1行,第二参数为i+1是因为i从0开始计数,# fields[i][0]取得字段的名称sheet.cell(1, i + 1, fields[i][0])# 从工作表第2行开始写入每条记录的内容for row in range(0, len(table_rows)):for col in range(0, len(fields)):sheet.cell(row + 2, col + 1, '%s' % table_rows[row][col])# 保存到Excel文件中workbook.save(filename)# 主函数main
if __name__ == '__main__':# 初始化各变量值host = 'localhost'# 数据库服务器的IP地址db_name = 'book_manager' # 数据库的名字table_name = 'book_type' # 指定数据库中表的名字user = 'root' # 用户名password = '123456' # 密码# 调用函数,将数据表的内容导入到一个Excel文件中fields, table_rows = get_data(host, db_name, table_name, user, password)print("fields", fields)print("table_rows", table_rows)export_to_excel(fields, table_rows, './book_type.xlsx')
运行结果展示:
fields (('bookTypeId', 3, None, 11, 11, 0, False), ('bookTypeName', 253, None, 80, 80, 0, False), ('bookTypeDesc', 253, None, 1020, 1020, 0, False))
table_rows ((1, '计算机科学', '计算机相关'), (2, '历史', '历史相关'), (3, '文学', '文学相关'), (4, '科幻', '科幻相关'), (6, '小说', '小说相关'), (7, '外语', '外语相关'))
我们打开生成的book_type.xlsx文件,里面内容如下:
从结果上和之前指定数据库中的表里面的内容一样,可见成功。
需要注意的是,下面这些信息需要根据自己的数据库设置保持一致:
host = ‘localhost’# 数据库服务器的IP地址
db_name = ‘book_manager’ # 数据库的名字
table_name = ‘book_type’ # 指定数据库中表的名字
user = ‘root’ # 用户名
password = ‘123456’ # 密码
关于pymysql的基础操作及其代码展示在博主另外一篇博客:pymysql进行数据库各项基础操作