l 日志log
https://cloud.tencent.com/developer/article/1086872
warnings.simplefilter() --
l 数据库mysql
https://blog.csdn.net/guofeng93/article/details/53994112
python3.0使用pymysql数据库包,mysql客户端可以使用SQLyong/Navicat
pip install PyMySQL
import pymysql
- 工作原理
l 创建连接
l 创建游标对象(sql语句的执行,获取结果等都是在游标上操作的)
l 关闭游标和数据库连接
- 各流程对应的方法
1 创建数据库连接
db = pymysql.connect(host=?,user=?,possword=?,database=?,port=3306,charset=utf8, cursorclass=Cursor, autocommit=False)
database:指定的数据库
charset:指定的字符编码
cursorclass:指定游标
autocommit:False代表sql dml语句不自动提交
# 检查连接是否断开,如果断开就进行重连
self.conn.ping(reconnect=True)
2 游标
创建游标,mysql的各种操作都是基于游标进行操作, 一个连接可以创建多个游标,互相不干扰
创建游标对象
cursor = db.cursour(cursor=None)
默认创建的游标类型是pymysql.cursors. Cursor;在这里可以创建不同的游标类型;也可以在connection连接中指明cursor类型
游标类型
l 缓存式游标
pymysql.cursors. Cursor 默认,该游标fetch返回的数据是元组类型(12,14)
pymysql.cursors. DictCursor该游标fetch返回的数据是字典类型{‘name’:12,’age’:14}
缓存式游标,不管是fetchone还是fetchall在执行语句时候会一次性返回所有的数据到客户端,当数据量特别大,会占用大量内存,导致内存溢出;大数据可以使用非缓存式游标
l 非缓存式游标
pymysql.cursors. SSCursor默认,该游标fetch返回的数据是元组类型(12,14)
pymysql.cursors. SSDictCursor该游标fetch返回的数据是字典类型{‘name’:12,’age’:14}
注:因为 SSCursor 是没有缓存的游标,结果集只要没取完,这个 conn 是不能再处理别的 sql,包括另外生成一个 cursor 也不行的。如果需要干别的,请另外再生成一个连接对象。
每次读取后处理数据要快,不能超过 60 s,否则 mysql 将会断开这次连接,也可以修改 SET NET_WRITE_TIMEOUT = xx 来增加超时间隔。
游标相关操作
执行sql语句
l 执行单条SQL
cursor.execute(sql语句) --执行sql语句,并返回影响行数
l 批量执行sql语句
cursor.executemany(templet,args) 能同时执行多条语句
templet:sql模板字符串
args:模板字符串参数列表,列表中每个元素必须是元组
示列:
cursor.executemany(“insert into values %s,%s”,[(20,30),(10,20)]) ,执行2条sql语句
获取数据
执行查询sql后,需要获取查询出的记录;sql执行后,游标cursor指向第一条数据之前的位置,通过fetch移动游标来获取数据
l 获取剩余的所有记录
cursor.fetchall()
该方法会获取游标位置之后的所有记录
l 指定每次获取n条记录
cursor.fetchmany([n])
该方法每次调用会获取游标位置后的n条记录,执行一次,游标移动n条记录
l 指定每次获取1条记录
cursor.fetchone()
该方法每次调用会获取游标位置后的1条记录,执行一次,游标移动1条记录
l 返回记录总数
cursor.rowcount()
该方法返回游标最后一次exeute返回数据的行数;即记录总数
l 返回游标的位置
cursor.rownumber() --返回当前游标的位置
注:1.数据取完返回None
2.cursor游标fetch到的记录返回类型,根据设置的游标类型来定的;Cursor游标返回元组类型;DictCursor游标返回字典类型
关闭游标
l 手动关闭游标
游标执行完后,执行cursor.closed()关闭游标
l with语句自动关闭游标
conn = sql连接
try:
with conn.cursor() as cursor :
result = cursor.execute(…)
conn.commit
finally:
conn.close()
注:游标使用with,可以自动在with语句结束后,自动关闭游标
3 事务提交&回滚
l 提交DML
默认创建connection连接时自动提交设置为false,对于DML操作,不会自动提交,需要用户手动提交;也可以设置自动提交为True,那么对应的DML操作会自动提交的
conn.commit() --手动提交
conn. autocommit(True) --设置自动提交;或者在创建connection时参数autocommit=True
l DML数据回滚
conn.rollback()
一般在执行DML语句出错后回滚;对于未提交的数据可以执行数据回滚
4 关闭连接
conn.close()
样例
示列1:
邮件
pip install zmail
使用之前确认你的邮件打开smtp/pop3功能
连接邮件服务器
server = zmail.server(username,psd,smtp_host=’smt.163.com’,smtp_port=994,smtp_ssl=True,pop_host=’pop.163.com’,pop_port=995,pop_tls=True)
l 校验smtp和pop功能是否正常
server.stmp_able()/server.pop_able() 返回true代表正常
注:如果发件人邮箱是QQ邮箱,密码要使用授权码
获取邮件
l 获取最新邮件
mail=server.get_latest()
l 通过ID检索邮件
mail=server.get_mail(2)
l 根据主题&发件人等搜索邮件
mail=server.get_mails(subject=‘主题关键字’,start_time=‘开始时间’,sender=‘发件人’,start_index=‘指定开始范围’,end_index=‘结束范围’)
注:返回数组,其中主要主题包含subject就会被搜索到,start_index/end_index是指从第几条搜索到第几条
l 获取邮箱信息
server.stat()返回(邮件条数,邮箱大小)
解析邮件内容
mail返回的是字典,邮件都映射到字典中,mail[‘subject’] --获取邮件的主题
l 显示邮件
zmail.show(mail)
l 获取邮件信息
mail[‘subject’],mail返回的是字典
发送邮件
server.send_mail(recip,mail, cc=None, timeout=None)
recip:收件人,可以是str/list:‘aa@163.com’/[‘aa@163.com’,’nn@163.com’]
mail:邮件内容,dict类型,dict中固定key如下:
‘subject’:主题
‘content_text’:发送文本内容
‘content_html’:发送html内容,html文件的字符串内容,需要f.read()出来
’attachments‘:附件list,使用绝对路径
cc:抄送人,同recip一样
l redis
http://www.cnblogs.com/hjc4025/p/709615.html
import redis
1 工作原理
l redis连接池,连接池相当于缓存了多个客户端与redis服务端的连接,当有新的客户端来进行连接时,只需要去连接池获取一个连接即可,实际上连接池就是把一个连接共享给多个客户端,类似广播
2 流程
3 连接池
conn_pool = redis.connectionPool(host=,port = ,posswd= ,db=,decode_response=False)
decode_response:默认False,结果返回的是二进制;True返回字符串
4 客户端访问
l 客户端使用连接池链接访问
re_pool = redis.Redis(Connection_pool=conn_pool)
l 客户端直接访问
re_pool = redis.Redis(host=’’,port=’’…)
l 另一个客户端连接池访问
re_pool1 = redis.Redis(Connection_pool=conn_pool)
注:redis每次客户端只能请求一个指令,如果想同时请求多个指令,需要使用管道
re_pool.pipline(transaction=True)