学习记录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")   #最后保存,名字一致即可

猜你喜欢

转载自www.cnblogs.com/guodengdeng/p/11080453.html