因为最近织梦开启了版权收费,所以之前用织梦开发的网站都需要换一下,正好之前自己写了一套tp5开发的cms,本着为客户负责的态度,我们公司开始给之前的老客户免费更换后台,今天写这篇文章是为了记录下,tp
顺晟科技
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()
12
2021-11
28
2021-08
28
2021-08
16
2021-06
16
2021-06
16
2021-06