• python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密


    1.python操作mysql

    步骤:

    1. 连上数据库,输入 ip,账号密码,端口号,数据库名字
    2. 执行sql
    3. 获取到结果
    import pymysql #导入mysql模块
    coon=pymysql.connect(host='IP',user='用户名',password='数据库密码',port=3306,db='数据库名',charset='utf8',autocommit=True)#autocommit=True表示自动提交
    cur = coon.cursor() #建立游标
    sql = 'insert into nhy (name,pwd) value ("xiaobai","1234567");'
    cur.execute(sql)#执行sql语句,它只是帮你执行sql语句,不会给你返回数据
    print(cur.fetchall()) #获取查询到的所有结果
    print(cur.fetchone())  #只获取一条
    print(cur.fetchmany(2)) #指定获取几条
    cur.close()#游标关闭
    coon.close()#连接关闭
    
    #封装一个连接mysql的函数
    def my_db(ip,user,passwd,db,sql,port=3306,charset='utf8'):
    	coon = pymysql.connect(host=ip,user=user,
    					password=passwd,db=db,
    					port=port,charset=charset,autocommit=True)
    	cur = coon.cursor()
    	sql=sql.strip()
    	cur.execute(sql)
    	sql_start = sql[:6].lower()#取sql的开头,转成小写
    	if sql_start.startswith('select') or sql_start.startswith('show'):
    		data = cur.fetchall()
    	else:
    		data = 'ok'
    	cur.close()
    	coon.close()
    	return data
    
    2.python操作redis

    SQL (Structured Query Language) 数据库,指关系型数据库 - 主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。

    NoSQL(Not Only SQL)泛指非关系型数据库 - 主要代表:MongoDB,Redis,CouchDB

    SQL数据存在特定结构的表中;而NoSQL则更加灵活和可扩展,存储方式可以省是JSON文档、哈希表或者其他方式。

    import redis #导入redis模块
    r=redis.Redis(host='IP地址',port=6379,password='******',db=10)#连接数据库,主机名,端口号,数据库密码,数据库名
    
    #操作string类型
    r.set('nhy_info','age 18 sex nan sdfsdfsdfsd') #增加、修改数据
    res = r.get('nhy_info_hhh')  #获取数据
    r.delete('nhy_info') #指定一个key删除他,key不存在的话
    print( res.decode() ) #编码,将数据库中的二进制编码成字符串
    #其他的方法
    print(r.keys('*info')) #获取到所有的key
    print(r.exists('dashu_name')) #判断这个key是否存在
    r.flushdb()#可以清空当前数据库里面所有的key
    r.expire('session_crm',600)#指定key的失效时间
    print(r.ttl('session_crm'))#用来这个key的失效时间
    print(r.type('session_crm'))#看key的类型
    
    #操作hash类型
    r.hset('session_crm','laowang___','ssdfsdfjksdklfjssdf') #增加,修改数据
    r.hdel('session_crm','liuxinyu') #删除指定的小key
    r.delete('session_crm') #直接删除大key
    print(r.hget('session_crm','zhouyifan_'))#获取指定小key里面的数据
    
    res = r.hgetall('session_crm')#获取到hash类型里面所有的数据
    a = {}
    for k,v in res.items():
    	a[k.decode()] = v.decode()
    print(a)
    
    3.python发送邮件

    在邮箱中开启POP3/SMTP服务,获取授权码

    import yagmail #导入mail模块
    mail=yagmail.SMTP(user='邮箱账号',password='邮箱授权码',host='smtp.163.com')#连接邮箱,host指定邮箱类型
    mail.send(to=['511402865@qq.com','892715094@qq.com'],cc['keweinielei@163.com','944527839@qq.com'],subject='邮件主题',contents='邮件内容',attachments=r'邮件附件的绝对路径')#安全协议,smtp_ssl=True如果是qq邮箱需要加这个参数
    
    4.python操作EXCEL
    import xlwt  #导入excel模块
    book=xlwt.Workbook() #创建excel
    sheet=book.add_sheet('stu_info')  #加一个sheet
    sheet.write(0,0,'学生编号')   #第一行第一列
    sheet.write(0,1,'学生姓名')   #第一行第二列
    sheet.write(0,2,'成绩')      #第一行第三列
    book.save('stu1.xls')       #一定要用xls结尾
    
    5.python MD5加密

    md5加密算法是不可逆的,所以解密一般都是通过暴力穷举方法,通过网站的接口实现解密

    import hashlib #导入MD5模块
    s='123nhy456_++dfsdfsd'
    s.encode()#将s编码成二进制模式
    m = hashlib.md5(s.encode()) #加密,必须得传一个bytes类型的
    print(m.hexdigest()) #获取到加密后的结果
    
    #封装一个md5函数
    def myMd5(s):
    	s = str(s)
    	m = hashlib.md5(s.encode()) #必须得传一个bytes类型的
    	return m.hexdigest()
    
    6.常用模块补充

    import datetime

    print(datetime.date.today()) #当天的日期,只有日期
    print(datetime.datetime.today())  #当天的时间,有日期有时间
    print(datetime.date.today() + datetime.timedelta(days=10))
    res = datetime.datetime.today()  + datetime.timedelta(hours=-10,minutes=-20)  #当天的时间,有日期有时间
    print(res.time()) #只取到时间
    print(res.date())#只取到日期
    print(res.timestamp()) #时间戳
    print(res.strftime('%Y-%m %H:%M:%S'))#取到格式化好的时间
    

    map,filter

    map() #循环调用函数
    dir_names =['android','ios','tomcat','java','python','php','nginx']
    res = list(map(makir,dir_names)) #循环帮你调用函数
    #等效下面的代码
    def makir(dir_name):
    	if not os.path.isdir(dir_name):
    		os.mkdir(dir_name)
    		return True
    #列表推导式与函数生成器
    num1  = [ str(i).zfill(2) for i in range(10)  ]  #列表推导式,空间换时间
    num2 = ( str(i).zfill(2) for i in range(10) ) #生成器,时间换空间
    
    #filter 过滤器
    def my(num):
    	if num%2==0:
    		return True
    		
    res1=list( filter(my, range(10) ))#过滤,它把函数处理结果为假的数据给过滤掉了,只保留函数返回真的数据
    res2=list( map(my, range(10) )) #执行函数,保存函数执行结果
    

    import os

    print(os.path.abspath('..\day3')) #取绝对路径
    print(os.getcwd()) #获取当前工作目录
    # .代表当前目录  ..上一级目录 ...
    print(os.listdir('e:\spz\day3'))
    os.chdir('e:\spz\day3')#更改当前工作目录
    os.system('ipsdfds')#用来执行操作系统命令,无法获取结果
    res = os.popen('ipconfig').read() #用来执行操作系统命令,可以获取结果
    print('res的结果',res)
    
  • 相关阅读:
    剑指Offer_栈的压入序列是否有对应的弹出序列
    剑指Offer_Java_顺时针打印矩阵(二维数组)
    排序算法Java代码实现(四)—— 归并排序
    排序算法Java代码实现(六)—— 堆排序
    排序算法Java代码实现(五)—— 快速排序
    排序算法Java代码实现(三)—— 插入排序 和 希尔排序
    CSS sprites
    局部变量和参数传递的问题
    隐藏元素的方式有哪些
    box-sizing属性的的用法
  • 原文地址:https://www.cnblogs.com/tudouxifan/p/9291571.html
Copyright © 2020-2023  润新知