Python操作数据库及hashlib模块
import hashlib #导入模块
######## md5 ###########
m = hashlib.md5() #创建一个对象
m.update(b"hhf") #加密字符串 b代表byte,是把字符串转换成byte类型,也可以用bytes()强制转换
#m.update(bytes("hhf",encoding='utf-8')) #不指定encoding会报错,TypeError: Unicode-objects must be encoded before hashing
#bytes() 强制转换为字节类型
print(m.digest()) #取加密后字符串 转换成2进制格式hash
print(m.hexdigest()) #16进制格式hash,比较常用 ###########-sha1 ########
hash = hashlib.sha1()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha256 ########
hash = hashlib.sha256()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha384 ########
hash = hashlib.sha384()
hash.update(b'admin')
print(hash.hexdigest()) # # ######## sha512 ########
hash = hashlib.sha512()
hash.update(b'admin')
print(hash.hexdigest()) #以上的加密方法都无法解密
1.操作Mysql(oracle的和mysql的一样,只不过是库不一样而已)
pip install pymysql #安装mysql模块 import pymysql
ip = '127.0.0.1'
port = 3306
passwd = 'root'
user = 'root'
db = 'szz'
#建立数据库连接,指定数据库的ip地址,账号、密码、端口号、操作的数据库、字符集
conn=pymysql.Connect(host=ip,port=port,user=user,passwd=passwd,db=db,charset='utf8')
#conn=pymysql.Connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='szz',charset='utf8') cur = conn.cursor() #在连接上建立一个游标
#cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立 一个游标,指定游标类型为字典类型,操作返回的结果为字典类型,这个方便取值 # 执行SQL,并返回收影响行数
#effect_row = cursor.execute("update students set name = 'hhf' where id = 1;")
# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into students (name,age) values (%s,%s); ", [("hhf", 18), ("aaa", 20)])
#sql = 'insert into nhy (id,name,sex) VALUE(80,"cc","女");'
sql2 ='select * from nhy;'
cur.execute(sql2) #查询语句可以用这个
print(cur.fetchall()) #获取表中所有数据,返回结果为List,如果是普通游标,无素为元组,字典游标,元素为字典
#print(cur.fetchone()) #获取一条,一次获取一条
#如果先fetchall()再fetchone是没有结果的,因为游标已经移动到最后,用cur.scroll()来移动游标
#cur.scroll(0,mode='absolute') #absolute 绝对位置 就是把游标直接移到哪里
#cur.scroll(5,mode='relative') # reletive 相对位置 这个是相对于当前游标移动到哪里
#print(cur.fetchmany(3)) #获取前n行数据 conn.commit() #提交,insert,delete,update必须提交才能生效, #有连接就有关闭
cur.close()#关闭游标
conn.close()#关闭连接 操作数据库的函数
def OperationDb(host,user,passwd,db,sql,port=3306,charset='utf8'):
conn = pymysql.connect(
host=host,user=user,passwd=passwd,port=port,
db=db,charset=charset
) #建立连接
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#建立游标
cur.execute(sql)#执行sql
#insert update delete语句需要commit()才能提交, #select 不需要
#判断是什么语句
if sql.startswith('select'):
res = cur.fetchall()
else:
conn.commit()
res = 88
cur.close()
conn.close()
return res if __name__ == '__main__':
ip = '127.0.0.1'
port = 3306
passwd = 'root'
user = 'root'
db = 'szz'
sql = 'insert into hhf(id,name,sex) VALUE (8,"hhff","未知");' # 插入
sql2 = 'select * from hhf limit 3;' # 查询
sql3 = 'delete from hhf where id=8' # 删除
sql4 = 'update hhf set name = "hhf" where id=8' # 更新
s = OperationDb(host=ip, port=port, user=user, passwd=passwd, db=db, sql=sql2)
#也可以直接传值,
# s = OperationDb(host='127.0.0.1', user='root', passwd='root', db='szz', sql=sql2)
print(s) 2.操作redis
redis是一个nosql类型的数据库,数据都存在内存中,有很快的读写速度,python操作redis使用redis模块,pip安装即可 pip install redis #安装redis模块 import redis,json
ip = '127.0.0.1'
port=6379
db=0
passwd = ''
#连接redis
r = redis.Redis(host=ip,port=port,db=db,password=passwd) r.set('age',18) #set值 redis里面存的数据全是字符串
r.set('name',[1,2,3,4]) #可以传字典和list 最后会被转成字符串 ,redis连接工具,reload查看更新的redis数据
r.set('name',{1,2,3,4}) #redis里面存的数据都是字符串,如果set的key已存在,就会更新值
r.setnx('ccc','hhf') #set值,如果key不存在会创建,key存在,不操作
r.setex('bbb','hahaha',15) # 可以设置key的失效时间,token的失效时间用的就是这个 name = r.get('name')#从redis中获取的数据全是bytes类型
print(name) #结果b'{1, 2, 3, 4}'
name = name.decode()#要使用decode方法给它转成字符串才能继续操作
print(r.get('aaaa'))#get不存在的key,就返回None r.mset(hhf1='haha',hhf2=1888) #批量设置值
r.mget('name','age') #批量获取key r.delete('age') #删除某个key
r.delete('hhf1','hhf2')#删除多个key print(r.keys()) #获取所有的key,返回的结果是List,如果需要使用,得遍历后decode()
print(r.keys('*n*')) #获取含有n的key # #下面操作哈希类型的key
r.hset('hhf_session','name','hhf')
r.hset('hhf_session','age',18) print(r.hget('hhf_session','age'))#获取hhf_session里面age的值,必须两个参数
print(r.hgetall('hhf_session'))#获取哈希类型里面所有的值 r.delete('hhf_session') #把key删除,包括下面的nam和age
r.hdel('hhf_session') #会报错,该方法里面的两个参数是必填的
r.hdel('hhf_session','name')#删除hhf_session下的name属性
r.hsetnx('hname','key2','value23')#给name为hname设置key和value,和上面的不同的是key不存在的时候#才会set
r.hmset('hname',{'k1':'v1','k2':'v2'})#批量设置哈希类型的key和value #如果key里面有冒号 就会多个文件夹
r.set('hhf:hhf','haha')
r.set('hhf:cccc','aaa')
r.hset('sss:hhf','hhf','')
r.delete("hhf:cccc") 操作redis的函数:
def OpRedis(host,passwd,k,v=False,port=6379,db=0):
#此函数只实现了redis的set与get方法 只是针对str类型
#del方法及hset hget方法未实现
r = redis.Redis(host=host,password=passwd,port=port,db=db)
#连接数据库
if v:#判断value是否传值,如果传了就说明是set方法
r.set(k,v)
res = 88
else:
res= r.get(k).decode()
#因为从redis里面获取到的数据都是字节类型的 ,要把它转成字符串
#所以要用decode方法
return res
Python操作数据库及hashlib模块的更多相关文章
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- python操作数据库之批量导入
python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...
- 零基础学Python--------第11章 使用Python操作数据库
第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...
- Python操作数据库之 MySQL
Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python学习笔记 - day11 - Python操作数据库
MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...
- 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作
孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...
- python操作数据库PostgreSQL
1.简述 python可以操作多种数据库,诸如SQLite.MySql.PostgreSQL等,这里不对所有的数据库操作方法进行赘述,只针对目前项目中用到的PostgreSQL做一下简单介绍,主要包括 ...
- Python 入门之 内置模块 -- hashlib模块
Python 入门之 内置模块 -- hashlib模块 1.hashlib 摘要算法,加密算法 (1)主要用途: <1> 加密 : md5 sha1 sha256 sha512 md5, ...
随机推荐
- MyBatis3教程
MyBatis3教程: http://www.yihaomen.com/article/java/302.htm http://www.mybatis.org/mybatis-3/zh/index.h ...
- BMP的图像处理
近期碰到了一个问题将图片缩放: 进行了整理发现位图一些主要的结构能够进行整理,得出下面图表: 进行图片缩放的时候会进行一些处理(最临近差值法): 详细的代码例如以下: #include <std ...
- LINKs: Xamarin.Forms + Prism
LINK 1 - How to use Prism with Xamarin.Forms http://brianlagunas.com/first-look-at-the-prism-for-xam ...
- 【Spark】Stage生成和Stage源代码浅析
引入 上一篇文章<DAGScheduler源代码浅析>中,介绍了handleJobSubmitted函数,它作为生成finalStage的重要函数存在.这一篇文章中,我将就DAGSched ...
- CoffeeScript里的字符串插值
拼接字符串是我们常干的事情.与其用很多的 "" + "",不如用一下字符串插值,可读性好些. 方法是在字符串中加入#{ 变量.表达式.函数等} getOther ...
- 批量ssh执行命令
[root@openfire1 script]# cat test.sh #!/bin/bash #本地通过ssh执行远程服务器的脚本 for ip in `cat iplist` do ...
- GammaRay观察Qt程序的运行状况
GammaRay是KDAB开发的Qt应用程序的软件内省工具.利用QObject内省机制,它允许您在运行时观察和操作应用程序.这既可以在工作站本地使用,也可以在嵌入式目标上远程使用. 通过扩充指令级调试 ...
- bootstrap table 显示连续序号,分页有效
参考:http://blog.csdn.net/nazhidao/article/details/51647799 第一种,通过index+1可以简单实现,但是,翻页后又重新从第一个开始 { fiel ...
- bzoj 5090 组题
题目大意: 一个数列,求一段长度不少于k的数 使平均值最大 思路: 把所有数列里的数,转换为(i,sum i)的点 然后求一个下凸包,在这个过程中对于长度特殊处理一下,使栈内至少有一段长度大于等于k ...
- bzoj2744 [HEOI2012]朋友圈——二分图匹配
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 首先,求一个图的最大团等价于求它的补图的最大独立集,而二分图的最大独立集 = 总点数 ...