学习记录005-模块/读写Excel/数据库操作
【关于模块的概念】
1 标准模块---->python自带的模块,安装python就可直接倒入使用的,比如time和os等
2 第三方模块---->pymysal等需要安装的
3 自己写的python文件---->一个python文件就是一个模块
4 倒入模块的实质---->就是把倒入的模块文件从头至尾的运行了一遍
5 倒入模块的顺序---->倒入一个模块首先会在当前路径下查找,如果没有则在python的环境变量文件目录里面去找,如果都没有则报错
查看python环境变量路径有哪些:
import sys print(sys.path) #查看python环境变量路径,倒入的模块只要存在于里面其中一个就不会报错,都没有的话就会报错
6 pycharm工具查找模块不在当前目录下找,所以倒入当前路径下的模块会标红,但是不影响使用
7 场景,一个工程下有两个项目,A和B,需要执行的文件导入的模块不在B下面,而是在A下面,那么也就是说需要倒入的模块不在当前路径下也不在python的环境变量里面,而是在别的文件路径下,那么怎么解决呢?
需要把当前想要倒入的模块所属的文件路径加到python的环境变量里面,添加的方式有两种,均以代码实现,如下:
import sys # 这里的添加是一次性的,如果后期还需要找的话,还需要添加一次 sys.path.append("这里是需要倒入模块当前所属的文件路径") #添加的第一种方法,这种方式的添加是添加到python环境变量文件的最后的位置 sys.path.insert(0,r"这里是需要倒入模块当前所属的文件路径") #添加的第二种方法,但是是在输出的路径列表里面指定位置进行添加,优先查找
8 关于代码文件里面“if__name__=='__main__'”
写这句话本身的文件代码:运行不受任何影响
当前文件别别的模块倒入的时候,这行代码下面的内容不会执行,只执行这行代码上面的部分
【操作mysql】
import pymysql # 下面这些信息是连接数据库的必填项 #ip port user password db #166.25.3.55 3306 zzz 123456 zzz # 第一步:建立连接 conn = pymysql.connect(host = "166.25.3.55",user = "zzz",password = "123456",db = "zzz", port = 3306,charset = "utf8",autocommit = True) #最后一项只要添加,那么下面的commit就可以去掉,作用是自动提交 # 注意:password得是字符串,port得是整数,其中port也可以不写,有默认值 cur = conn.cursor(pymysql.cursors.DictCursor) #建立游标 #查看数据库里面的前10条数据 sql = "select * from app_student limit 10" # 下面这条是操作往数据库添加数据的sql命令 # sql1 = "insert app_student ( `name`, `sex`, `age`, `addr`, `grade`, `phone`, `gold`) values ( '郭等等', '女', '26', '河南省济源市北海大道32号', '水瓶座', '18631706666', '100');" cur.execute(sql) #只能帮你执行sql语句,但是不能输出结果 # conn.commit() #如果是delet语句或者update语句或者insert语句的话,操作数据库的时候需要commit一下 print(cur.fetchall()) #获取sql语句执行的结果,返回二维数组(()) # print(cur.fetchone()) #取一条数据,返回一维数组() # print(cur.fetchmany(10)) #可以根据里面的数字进行数据取的条数,返回二维数组 cur.close() conn.close()
注意项:
1 建立连接的时候,输入的用户名密码必须是字符串;port得是整数,也可以不写,因为有默认值;
2 代码aotucommit=True:的作用是----进行数据库insert或者delete等操作的时候,会自动提交代码进行操作从而返回给用户结果
3 关于建立游标:为用户开设的数据缓冲区,存放sql语句的执行结果
建立游标最后结束的时候一定要一次关闭游标和连接:cur.close() conn.close()
4 执行结果是在游标里面,执行sql命令:cur.execute(sql语句),只能执行语句,但是不能拿到结果
5 那么如果拿结果的话,我们就需要输出,输出的话可以分三种形式进行输出====》
001 print(cur.fetchall()) #获取sql语句执行的结果,返回的结果是一个二维数组:[()] 元组类型
002 print(cur.fetchone()) #输出sql语句执行结果的第一条数据,只取一条,返回的是一个一维数组:()
003 print(cur.fetchmany(2)) #可以根据里面的数字进行sql语句执行结果的条数的返回,返回的是一个二维数组
6 关于代码:conn.commit():如果是针对数据库进行操作insert或者update,delete等操作的时候,需要针对连接进行commit一下,目的是数据库更新提操作
那如果在一开始连接时候进行了:aotucommit=True的操作,这句话就不必写了,两者作用一致,只是前者会自动提交,而后者执行一次就需要提交一次
7 只有执行了sql,才能输出结果
8 在运行代码查看结果的时候,如果报错信息有:you have an error in your SQL syntax的报错信息,就是sql语法错误
9 sql语句执行delete insert update等语句的时候,执行是没有输出结果的
10 如果想要输出的结果是字典类型,那么在哪里指定输出格式呢?
在建立游标的时候,指定一个游标类型:pymysql.cursors.DictCursor 即可
【安装模块的分类】
# 安装第三方模块,在有网络连接的情况下,在终端输入如下命令即可下载安装: # 1 pip install 模块 # 无网络连接的情况下进行手动安装: # 1 下载.whl文件 # pip install 文件下载的路径 # 举个例子:想要安装的第三方模块先进行pypi源的下载,随后在终端进行:pip install + 想要安装模块的绝对路径即可 # 2 下载.tar.gz的文件 # 1 解压 # 2 进入目录执行 python setup.py install # 举个例子:比如在pypi源下载了想要安装的pymysql.tar.gz文件,首先先解压,随后在终端进入该解压目录,输入:python setup.py install即可 # 场景:如果换电脑重新安装python,那么这么模块还需要重新安装,那么可以用下面的方法查看安装了哪些模块,进行导出方便查看 # 查看当前安装了哪些模块 # 终端输入:pip list # 如果显示的很多,可以用管道符 + more逐一查看:pip list | more # 把当前安装的第三方模块有哪些罗列到一个文档里面: # 在终端找位置,或者直接在路径下操作 # pip freeze > 这里是文件的名称,比如:第三方模块.text ----->这样就导出了第三方模块的罗列文件和对应的版本号 # 场景:那如果罗列的太多,还是需要手动去输入命令安装,那么有什么便捷的方法去一次把文件里面的全部模块都安装上呢? # pip install -r 文件名文件名文件名文件名 #指定文件,批量安装文件内的模块
【操作表格-只读】
import xlrd #进行读取表格需要倒入的模块:只能读不能写 book = xlrd.open_workbook("人员名单.xlsx") #打开表格:如果文件在当前目录下直接输入文件名即可,如果没有在当前目录下,要输入绝对路径 sheet1 = book.sheet_by_index(0) #根据sheet页的下角标进行获取当前在哪个sheet页 sheet2 = book.sheet_by_name("作业") #也可以根据sheet页的名字来获取当前在哪个sheet页 print(sheet2.row_values(0)) #获取当前sheet页第几行的行数据 print(sheet2.col_values(0)) #获取当前sheet页第几列的列数据 print(sheet2.cell(2,1).value) #指定想要获取的单元格的位置进行输出 输入为sheet的行和列的角标 print(sheet2.nrows) #获取sheet页多少行 print(sheet2.ncols) #获取sheet页多少列
【操作表格-只写】
import xlwt #只能写,用于新建表格 book = xlwt.Workbook() #新建一个excel sheet= book.add_sheet("人员名单") #新建一个sheet页 sheet.write(0,0,"姓名") sheet.write(1,0,"郭等等") sheet.write(0,1,"学习形式") sheet.write(1,1,"现场") sheet.write(0,2,"测试") book.save("students.xls") #这里我写的的是当前目录下的相对路径,也可以写绝对路径,这里写入的是文件名 # 最后进行保存的时候,如果使用的是微软的office,就使用xls # 如果是wps,就使用.xls或者.xlsx结尾
【操作表格-修改】
# 表格里面有内容,进行修改里面的数据或者添加 import xlutils,xlrd from xlutils import copy #从文件中倒入函数 # 思路: # 1 打开表格 # 2 必须复制一份 # 3 进行修改 book = xlrd.open_workbook("枚举函数007练习题.xls") #先打开表格 new_book = copy.copy(book) #必须得负值一份,在复制的这个文件的基础上进行修改 #获取sheet页是哪个角标下面的如下; # 其次你看同样是根据角标获取sheet页,那为什么不使用.sheet_by_index这个方法呢?因为new_book使用的是xlutils这个模块下的copy方法, # 而xlutils没有.sheet_by_index这个方法,但是有.getsheet这方法 sheet = new_book.get_sheet(0) title = ["编号","姓名","地址","手机号","性别"] #想要添加进表格的内容列为了一个列表 for index,value in enumerate(title): sheet.write(0,index,value) new_book.save("枚举函数007练习题.xls") #最后保存,名字一致即可