博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟牛牛老师学习python自动化的第六天
阅读量:4982 次
发布时间:2019-06-12

本文共 7600 字,大约阅读时间需要 25 分钟。

这周不再存文件里了,我们要开始操作数据库了~~~

一、数据库

#传统的关系型数据库      #mysql oracle SQL server sqllite db2      #id name passwd      #数据存在磁盘上      #使用sql语句来操作数据      #表与表之间有关系  #非关系型数据库 nosql   k-v形式     #{'name':'xxx',}     # mogodb 数据存在磁盘上的     #redis 数据存在内存里 1.1 Redis数据库 连接redis数据库 way1: RedisDesktopManager客户端连接

 

way2: 代码连接
import redis r = redis.Redis(host='ip',port=端口,password='密码',db=10) #连接redis #增删改查 #操作string类型 # r.set('zjr1','hahahhaha',50)#增加、修改数据 ,三个参数分别为 k、v、过期时间 # res = r.get('zjr1')#获取数据 # print(res) # #二进制  byte # r.delete('zjr')#删除 # print(res.decode())#编码 #其它的方法 # print(r.keys('*info'))#获取到所有的key # print(r.exists('zjr1'))#判断这个key是否存在 # r.flushdb()#可以清空当前数据库里面所有的key # r.expire('session_crm',600)#指定key的失效时间 # print(r.ttl('session_crm'))#用来查看这个key的失效时间 # print(r.type('session_crm'))#用来查看key的类型
# hash 哈希类型的key #哈希类型理解为一个字典嵌套字典 #select 10 redis的命令里面select 8 就是切换数据库 #增删改查 # r.hset('session_crm','zjr','dddddgskjfdd') # r.hset('session_crm','zjr1','dddddgskjfdd') # r.hset('session_crm','zjr2','dddddgskjfdd') # r.hset('session_crm','zjr3','dddddgskjfdd') # r.hset('session_crm','zjr4','dddddgskjfdd') # r.hset('session_crm','zjr5','dddddgskjfdd') # #修改也是hset # r.hdel('session_crm','zjr')#删除指定的小key # r.delete('session_crm')#直接删除大key #查 # print(r.hget('session_crm','zjr'))#获取指定的小key里面的数据 print(r.hgetall('session_crm'))#获取哈希类型里面的所有数据

 

将数据以字典形式显示

print(r.hgetall('session_crm'))#获取哈希类型里面的所有数据

不带“b”的字典显示:

1 res = r.hgetall('session_crm')#获取哈希类型里面的所有数据2 a = {}3 for k,v in res.items():4     a[k.decode()] = v.decode()5 print(a)

 

1.2 mysql数据库

1 # 1.连上数据库 ip 账号、密码 端口号、数据库                                                                2 # 2.执行sql                                                                                 3 # 3.获取到结果                                                                                 4                                                                                           5 import pymysql                                                                            6 #端口号是int                                                                                  7 coon = pymysql.connect(host='ip',user='用户',password='密码',                   8                 port=3306,db='数据库',charset='utf8',autocommit=True)                        9 cur = coon.cursor()#建立游标                                                                 10 sql = 'select * from app_student;'                                                       11 # sql = 'insert into nhy (name,pwd) value("zjr123","123456");'                           12 # sql2 = 'select * from nhy where name="zjr123";'                                        13 cur.execute(sql)#执行SQL语句,它只是执行sql语句,不会返回结果                                               14 # coon.commit()#除了查询都需要提交一下才会成功,有autocommit=True这个参数就可以不写commit                          15 print(cur.fetchall())#获取所有结果                                                             16 # print(cur.fetchone())#只获取一条                                                            17 # print(cur.fetchmany(2))#指定获取几条                                                         18 cur.close()#游标关闭                                                                         19 coon.close()#连接关闭

结果是二元数组

操作mysql数据库的函数:

(此函数存在两个问题 1.每操作一次数据库就要连接一次 2.如果sql语句写错了就会直接报错;第一个的解决办法是用类写,第二个的解决办法是抓取一下异常try一下)

1 #操作数据库的函数                                                       2 def my_db(ip,user,passwd,db,sql,port=3306,charset='utf8'):      3     coon = pymysql.connect(host=ip,user=user,                   4                     password=passwd,                            5                     db = db,                                    6                     port=port,                                  7                     charset=charset,                            8                     autocommit=True                             9                     )                                          10     cur = coon.cursor()                                        11     sql=sql.strip()                                            12     cur.execute(sql)                                           13     sql_start = sql[:6].lower()#取SQL的开头6位,转换成小写                14     if sql.startswith('select') or sql.startswith('show'):     15         data = cur.fetchall()                                  16     else:                                                      17         data ='ok'                                             18     cur.close()                                                19     coon.close()                                               20     return data

 加密模块

1 import hashlib2 s='123456'3 # print(s.encode())4 m = hashlib.md5(s.encode())#必须传一个bytes类型的5 print(m.hexdigest())#获取到加密后的结果6 # print(dir(m))#用dir可获取它拥有的方法7 #md5不可逆8 #所有一样的字符串,md5之后的结果都是一样的9 #撞库

有很多不同的加密

 

发邮件

第一步:安装模块pip install yagmail

第二步:获取授权码:

代码:

1 import yagmail 2 #账号、密码、邮箱服务器、收件人、抄送人 、 主题、正文、附件 3  4 username = '1334***924@qq.com' 5 passwd = 'glfy*****gkbaff'#授权码 6 mail = yagmail.SMTP(user=username,password=passwd,host='smtp.qq.com',smtp_ssl=True) 7 # 安全协议,smtp_ssl=True,如果是qq邮箱得加这个参数 8 #host='smtp.qq.com'邮箱服务器 163邮箱就是smtp.163.com 9 #连接上邮箱了10 mail.send(to=['1334****24@qq.com'],11           cc='1334***24@qq.com',12           subject='作业',13           contents='好好学习',attachments=r'C:\Users\Mezhou\PycharmProjects\untitled\day6\发送邮件.py'14           ) #cc是抄送15 #16 #卸载模块pip uninstall yagmail
如果你发送的附件名,中文是乱码的话 卸载模块pip uninstall yagmail 用群里给的这个yagmail安装包

 

 

 

重安之后结果附件标题中文不显示乱码了

  

生 成 器

 

生成器:为了节省内存的。

每次循环的时候,就按照这个规则(你写的逻辑)去生成一个数据

 

res = ['a','1']

只有你在每次循环的时候,才按照这个规则去帮你生成一个数据

 

 
生成器,节省空间,增加了CPU的计算时间 list,用空间换时间
1 nums = [str(i).zfill(2) for i in range(10)]#由[] 换()就是生成器2 print(nums)

结果:返回一个list

 

由[] 换()就是生成器

1 nums = (str(i).zfill(2) for i in range(10))#由[] 换()就是生成器2 print(nums)

结果:

节约了空间,不占内存,可以直接循环就可以打印出值

 

map——自动循环调用函数

1 import os2 def makir(dir_name):3     if not os.path.isdir(dir_name):#判断文件夹是否存在4         os.mkdir(dir_name) #不存在就创建5         return True#返回True6 dir_names =['android','ios','tomcat','java','python','php','nginx']7 res =list(map(makir,dir_names))#自动循环帮你调用函数的8 print(res)#返回生成器,节省内存

返回结果

生成的文件夹

map和filter

1 def my(num):2     if num%2==0:3         return True4 res = list(filter(my,range(10)))#过滤,它把函数处理结果为假的给过掉了5 #只保留函数返回真的数据6 res2 = list(map(my,range(10)))#不管返回啥,我都给你拿到7 print(res)8 print(res2)

 

取路径

 

 

查看当前目录下有什么:os.listdir('.')

改变当前的工作目录:chdir()

 system()执行操作系统命令:

 

 popen()也是执行操作系统命令,无乱码

 

datetime模块

 

1 import datetime2 print(datetime.date.today())#当天的时间,年月日3 print(datetime.datetime.today())#当前的时间,年月日+时分秒

1 import datetime2 # print(datetime.date.today())#当天的时间,年月日3 # print(datetime.datetime.today())#当前的时间,年月日+时分秒4 # res =datetime.datetime.today()+datetime.timedelta(hours=-10,minutes=-20)#非当时时间,默认天数,其它的加参数,days,5 res =datetime.datetime.today()+datetime.timedelta(-1)#一天前的时间6 print(res.time())#只取时间7 print(res.date())#只取日期8 print(res.timestamp())#取时间戳9 print(res.strftime('%Y-%m %H:%M:%S'))#格式化好时间

random模块

1 import random2 print(random.random())#取小于1的随机的小数3 print(random.randint(1,10))#指定范围,取随机的整数,可以取到104 print(random.choice('abcdffgg'))#随机选择一个,只能选择一个5 print(random.sample('abcdffgg',3))#随机选择n个,返回的是一个list6 print(random.uniform(8.8,10))#指定一个范围,然后取一个随机小数

写日志:

安装牛牛自己写的nnlog模块

 

import nnlogmy_log = nnlog.Logger('zjr.log',level='error',when='S',backCount=5)#level='error'生成哪个级别的#when参数按天(秒)生成日志文件,按天生成日志文件#backCount=5最多只保留5个日志,多的会被删除my_log.debug('这是debug级别的')my_log.info('这是info级别的')my_log.warning('这是warning级别的')my_log.error('这是error级别的')# my_log.surprise()# debug 最详细,最清晰的,最不严重的,debug时打印参数,调试信息# info  正常的代码走到哪的信息# waring 警告,输入参数不正确# error  出错

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Mezhou/p/9300007.html

你可能感兴趣的文章
一个监听事件监听多个按钮
查看>>
调用其他类的方法
查看>>
SQlite数据库
查看>>
前端开发要注意的浏览器兼容性问题整理
查看>>
Python服务器开发 -- 网络基础
查看>>
开源项目Html Agility Pack实现快速解析Html
查看>>
一些常用的js,jquerry 样例
查看>>
Oracle PL/SQL 多重选择句
查看>>
dorado中的creationType选择类型
查看>>
C++11 数值类型和字符串的相互转换
查看>>
无锡盈达聚力科技有限公司
查看>>
tyvj1659中中救援队
查看>>
kubernetes学习:CKA考试题
查看>>
LINUX samba的安装使用
查看>>
CSS border 生成三角
查看>>
asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)
查看>>
7.STM32中GPIO理解
查看>>
base64 json
查看>>
在vim中搜索单词
查看>>
设置定点数学属性
查看>>