引言
最近接了一单,要求是用Python做一个小程序
1. 可以将MySQL中任意的表导出至Excel文件
2. 可以将任意Word文档的内容保存至MySQL中
配置开发环境
我使用的Python版本是3.7,下面的教程应该不适用于Python2。
安装pymysql库
这个库可以对MySQL进行处理
打开cmd,输入以下命令并回车
pip3 install pymysql
安装xlwt库
这个库是用来操作xls文件的
pip3 install xlwt
安装python-docx库
这个库用来读写docx文件,不支持doc文件
pip3 install python-docx
可能出现的问题
- 输入上述命令出现cmd的错误提示,说明没有配置环境变量。自行百度Python环境变量配置。
- 连接很长时间后自己退出或者下载速度超级慢。将下载源更换为国内源即可。在上面的命令后加上
-i https://pypi.tuna.tsinghua.edu.cn/simple
即可。
代码
# -*- coding: utf-8 -*-
# www.guanhaobo.cn
import xlwt
import docx
import pymysql
def MysqlToExcel(UserName, Password, Database, TableName, SaveName):
# UserName是MySQL账号,Password为MySQL密码,Database是数据库的名称,TableName是表的名称,SaveName是要保存的excel的名称
# 打开数据库连接
db = pymysql.connect("localhost", UserName, Password, Database)
# 使用cursor()方法获取操作游标
cursor = db.cursor()
count = cursor.execute('select * from '+TableName)
# print(cursor.lastrowid)
print("发现", count, "条记录")
# 重置游标的位置
cursor.scroll(0, mode='absolute')
# 搜取所有结果
results = cursor.fetchall()
# 获取MYSQL里面的数据字段名称
fields = cursor.description
workbook = xlwt.Workbook()
# 注意: 在add_sheet, 置参数cell_overwrite_ok=True, 可以覆盖原单元格中的数据
# cell_overwrite_ok默认为False, 覆盖的话, 会抛出异常
sheet = workbook.add_sheet('table_'+TableName, cell_overwrite_ok=True)
# 写上字段信息
for field in range(0, len(fields)):
sheet.write(0, field, fields[field][0])
print(fields[field][0], end=' ')
print()
# 获取并写入数据段信息
row = 1
col = 0
for row in range(1, len(results)+1):
for col in range(0, len(fields)):
sheet.write(row, col, u'%s' % results[row-1][col])
print(results[row-1][col], end=' ')
print()
workbook.save(SaveName+".xls")
print("成功写入", count, "条记录到"+SaveName+".xls")
def WordToMysql(UserName, Password, Database, TableName, FileName):
# 获取文档对象
file = docx.Document(FileName)
# 输出段落编号及段落内容
for i in range(len(file.paragraphs)):
print("第"+str(i+1)+"段的内容是:"+file.paragraphs[i].text)
# 打开数据库连接
db = pymysql.connect("localhost", UserName, Password, Database)
# 使用cursor()方法获取操作游标
cursor = db.cursor()
try:
# 创建数据表SQL语句
sql = "CREATE TABLE "+TableName + " (Paragraph varchar(500))"
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
print("出错了......或许"+TableName+"已经存在了!")
return
for i in range(len(file.paragraphs)):
print("成功插入第"+str(i+1)+"段......")
text = '"'+file.paragraphs[i].text+'"'
# SQL 插入语句
sql = "INSERT INTO "+TableName+"(Paragraph) VALUES (" + text + ")"
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
print("出错了......")
# 关闭数据库连接
db.close()
print("成功将"+FileName+"中的数据写入表"+TableName+"中!")
if __name__ == '__main__':
while True:
print(" **************************************************************")
print(" * 1. 将MySQL的表中数据导出至Excel *")
print(" * 2. 将Word文件导入MySQL *")
print(" * 0. 退出程序 *")
print(" **************************************************************")
a = int(input("请选择:"))
if a == 1:
print(" **************************************************************")
print(" * 将MySQL的表中数据导出至Excel *")
print(" **************************************************************")
UserName = input("请输入MySQL账号:")
Password = input("请输入MySQL密码:")
Database = input("请输入数据库名称:")
TableName = input("请输入表的名称:")
SaveName = input("请输入保存的excel文件名(无需扩展名):")
MysqlToExcel(UserName, Password, Database, TableName, SaveName)
elif a == 2:
print(" **************************************************************")
print(" * 将Word文件导入MySQL *")
print(" **************************************************************")
UserName = input("请输入MySQL账号:")
Password = input("请输入MySQL密码:")
Database = input("请输入数据库名称:")
TableName = input("请输入想要新建的表的名称:")
FileName = input("请输入word文件的路径(只支持docx文件,如:D:\\test\\你好.docx):")
WordToMysql(UserName, Password, Database, TableName, FileName)
elif a == 0:
input("按回车退出程序......")
exit()
太强了
tql