本篇文章是通过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’ # 密码