• python-数据库&邮件


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

    一、数据库


    #传统的关系型数据库
    #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 hashlib
    2 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:UsersMezhouPycharmProjectsuntitledday6发送邮件.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 os
    2 def makir(dir_name):
    3     if not os.path.isdir(dir_name):#判断文件夹是否存在
    4         os.mkdir(dir_name) #不存在就创建
    5         return True#返回True
    6 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 True
    4 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 datetime
    2 print(datetime.date.today())#当天的时间,年月日
    3 print(datetime.datetime.today())#当前的时间,年月日+时分秒

    1 import datetime
    2 # 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 random
    2 print(random.random())#取小于1的随机的小数
    3 print(random.randint(1,10))#指定范围,取随机的整数,可以取到10
    4 print(random.choice('abcdffgg'))#随机选择一个,只能选择一个
    5 print(random.sample('abcdffgg',3))#随机选择n个,返回的是一个list
    6 print(random.uniform(8.8,10))#指定一个范围,然后取一个随机小数

    写日志:

    安装牛牛自己写的nnlog模块

    import nnlog
    
    my_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  出错

    
    
  • 相关阅读:
    转载一篇文章--一个人和三个人称(周国平)
    第二天学习python的内容
    第一天 python学习的习题
    Linux基础:文件,目录浏览,管理及维护
    Linux基础之命令:Linux命令及获取帮助
    生成器
    迭代器协议
    max函数高级使用方法
    python内置函数、
    filter,map和reduce函数
  • 原文地址:https://www.cnblogs.com/Mezhou/p/9300007.html
Copyright © 2020-2023  润新知