18910140161

Python读取MySQL及Excel的xlsx文件和打包可执行文件

顺晟科技

2021-06-16 10:28:38

437

计算机编程语言

通过实践,我们直接介绍如何使用Python操作数据库,导入导出Excel,将可执行文件打包为exe。

案例描述

我们首先在当前环境中创建了一个新的xlsx文件:

*.png

如图所示,该表的列用于查询数据库:

*.png

根据条码在数据库中搜索对应的attribute_name和attribute_value,然后写入output.xlsx:

*.png

注意input.xlsx中列单元格的格式,需要设置为文本格式,否则因为条码以00开头,会被截取。

*.png

代码编写

创建新项目,选择Python环境,检查环境是否为当前环境:

*.png*。png

用pycharm创建python项目后,自动生成virtualenv环境,点击左下角使用terminal进入该环境:

*.png

#终端进入当前python环境

源venv/bin/激活

知道自己想做什么,下一步就是怎么做。首先,我们依赖于包装的选择。此时,我们百度和谷歌有以下选择:

Python读取xlsx文件,我们使用xlrd包。

#在刚打开的终端下安装xlrd

pip安装xlrd

Python写xlsx文件,我们可以用包xlsx,但是xlsx不支持写256列以上的Excel,不要用,用包xlsxwriter代替。

# xlwt不支持写入超过256列,因此请更改为xlsxwriter,否则它将报告:

ValueError:列索引(256)不是范围(256)中的整数

#在刚打开的终端下安装xlsxwriter

pip安装xlsxwriter

Python操作MySQL数据库,我们可以用MySQLdb包,但是由于MySQLdb只支持Python2,所以不需要这个浪费,直接用PyMySQL

*.png

#在刚打开的终端下安装PyMySQL

pip安装pymysql

*.png

最后我们安装pyinstaller,可以把python程序打包成exe文件,这样exe文件就可以直接交给别人直接运行,而不需要安装Python环境。

#在刚打开的终端下安装pyinstaller

pip安装pyinstaller

#打包exe文件的命令。-F选项可以键入一个exe文件。默认值为-D,这意味着将其键入文件夹中

pyinstaller -F TestDataGen.py

性能

还需要注意:

PyInstaller支持Python 2.7/3.4-3.7。可以在Windows,Mac OS X,Linux上使用,但是不跨平台。意思是如果你想打包成。需要在Windows系统上运行PyInstaller进行打包。

打包成exe文件后,需要获取当前exe文件的运行路径,这样就可以将input.xlsx和output.xlsx输入输出到当前目录。获取路径的方法如下:

导入系统

导入操作系统

打印(sys.path[0])

print(sys.argv[0])

print(OS . path . dirname(OS . path . real path(sys . executive)))

print(OS . path . dirname(OS . path . real path(sys . argv[0]))

口齿不清

我们使用:

dirpath=OS . path . dirname(OS . path . real path(sys . argv[0])

inputpath=dirpath '/input.xlsx '

output=dirpath '/output . xlsx '

将代码同步到GitHub或您的私有Git库。因为用pip安装的依赖很多,参考Node的package.json。JS Python也有类似的包管理方法。我们使用:

#将pip安装的软件包版本写入文件

pip冻结要求. txt

必要时,可以重新引入并重新安装这些依赖项:

pip安装-r要求. txt

关于其他用途,请参考python包管理-更佳实践

完整的代码如下:

#该代码的作用是:

# 1.从excel文件input.xlsx中读取张表的列

# 2,根据列的读取值,到MySQL数据库中逐个查找数据

# 3.将每个数据库中的数据写入output.xlsx

导入xlrd

导入xlsxwriter

导入pymysql.cursors

导入系统

导入操作系统

dirpath=OS . path . dirname(OS . path . real path(sys . argv[0])

inputpath=dirpath '/input.xlsx '

output=dirpath '/output . xlsx '

print(OS . path . dirname(OS . path . real path(sys . executive)))

print(OS . path . dirname(OS . path . real path(sys . argv[0]))

#写入工作簿

Book=xlsxwriter。工作簿(超过)#创建工作簿

Sheet=book.add_worksheet() #创建工作表

#连接到数据库

connection=pymysql。连接(主机=' localhost ',

用户='打官人,

密码='123456 ',

db=' daguanren _ demodb ',

port=3306,

charset='utf8mb4 ',

cursor class=pymysql。光标。dict光标)

# 使用读操作读取文件

workbook=xlrd。open _ workbook(输入路径)

# workbook=xlrd。open _ workbook(r ' f : \ demo。xlsx ')

# 获取所有表

打印(工作簿。sheet _ name())#[u ' sheet 1 ',u'sheet2']

# 根据表索引或者名称获取表内容

工作表1=工作簿。工作表_ by _ index(0)#工作表索引从0开始

工作表1 _ columns=工作表1。col _ values(0)

打印(sheet1_columns)

i=0

对于sheet1 _ columns: #中的条形码第二个实例

标题=['条形码]

正文=[条形码]

try:

以connection.cursor()为光标:

SQL=' SELECT ` attribute _ name `,` ATR attribute _ value ` FROM ` TB _ XL xs ` WHERE ` barcode `=% s '

cursor.execute(sql,(条形码,))

result=cursor.fetchall()

sheet.write(i,0,"条形码")

sheet.write(i 1,0,条形码)

j=1

对于结果中的结果:

sheet.write(i,j,rs['attribute_name'])

sheet.write(i 1,j,RS[' attribute _ value '])

j=j 1

最后:

i=i 2

connection.close()

book.close()

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航