day6 数据库 redis time和MD5模块
os模块补充
os.system(ipconfig)执行操作系统命令
os.popen('ipconfig')获取返回结果,需要read
res = open('ipconfig') print(res.read())
random模块
random.randint(1,20)随机取1-19,顾头不顾尾
random.choice([1,2,3])随机取一个元素
randome.sample(’hello world‘,2)随机获取多个元素,并返回list
random.unifom(1,9)随即浮点数,可指定范围
random.shuffle(x)洗牌,打乱
例子:res = random.unifom(1,9)
print('%.2f'$res)保留两位小数 #练习题:随机生成手机号
json导入
f = open('1.txt,'w') name = {'name':'wjx'}
res = json.dumps(names,ensure_ascii=False)#把字典转换成json串,加 ensure_ascil=False 是在包含中文情况下
f.write(res)
第二种:
d = name = {'name':'wjx'}
d_json = json.dumps(d)
json.dumps(d,f)写入文件
第三种:
json_data ={'name':'wjx'}
dict = json.loads(json_data)# 需要修改
要呈现json显示,首先把文件后缀名改成json结尾
pycharm左上角 code-reformat-code 快捷键 ctrl + alt + L
总结:
json.dumps()是将字典转化成字符串
json.loads()是将字符串转化为字典
json.load()把文件对象传入并且转化成字典,不需要读
json.dump()直接将内容写入文件
如果json中有中文显示
json.dumps(name,ensure_ascii=False)
json.losds(names)把json转化为字典
load方法
res = open('1.txt')
names = json.load(res)传得是文件对象,不需要读
d={"a":"abc"}
d_json=json.dumps(d)
json.dump(d,fw)#直接写到文件里面
time模块
time.strftime('%Y%m%d')#取当前时间
time.time()#取时间戳
time.sleep(10)#延时10秒钟
time.gtime()#将时间戳转化为时间元组
time.localtime()取当前时间元组,也可将时间戳转化为时间元组
time.mktime()把时间元组转化为时间戳,#用得不多
import datetime
now = datetime.datetime.now() # 当然时间格式化输出
# print(str(now))
print(datetime.datetime.now() + datetime.timedelta(3)) # 3天后的时间
print(datetime.datetime.now() + datetime.timedelta(-3)) # 3天前的时间
时间表示方式有2种:
1、时间戳
def transfer(timestamp,format='%Y-%m-%d %H:%M:%S'):
import time
'''
把时间戳转成格式化输出的字符串
'''
time_tuple = time.gmtime(timestamp)#先把时间戳转成时间元组
res = time.strftime(format, time_tuple) #格式化时间
return res
def transfer2(time_str,format='%Y%m%d%H%M%S'):
import time
'''
把格式化好的时间字符串转成时间戳
'''
time_tuple = time.strptime(time_str, format)
res = time.mktime(time_tuple)
print(res)
return int(res)
def get_other_time(day,format='%Y%m%d%H%M%S'):
#这个函数是用来获取N天前的时间,或者N天后的时间
#day如果传入负数,那么就是几天前的。传入正数,就是几天后的
import datetime
res = datetime.datetime.now()+datetime.timedelta(day)#取几天后的
res_time = res.strftime(format)#格式化时间
print(res_time)
return res_time
取当前时间
print(time.strftime('%Y-%m-%d',time.localtime(time.time())))
hashlid模块
s = '123'
hew_s = ('jmy123'.encode())#把字符串
new_s.decode()字节类型转化为字符串
md.digest()加密后的字符串
md.hexdigets()
def md5_passwd(str,sort='123456'):#sort是盐值
import hashlib
str = str+sort
md = hashlib.md5()#构造一个MD5
md.update(str.encode())#加密str
res = md.hexdigest()#加密后的字符串
return res
print(md5_passwd('nhy123'))
redis模块
import redis
#1、连接它
#下面都是操作string类型的
# r.set('nhy','nizhenhao!')#set数据
# print(r.get('ggy').decode())#get数据
# print(r.keys())#获取所有的key
#下面操作hash类型
#r.hset('nhy1','age','18')
# r.hset('nhy1','age1','18')
# r.hset('nhy1','age2','18')
# print(r.hget('nhy1','age'))
# nhy=r.hgetall('nhy1')#获取hash类型这个name里面所有的数据
# r.delete('nhy1')#删除key
# {"age3":"23","age2":"20"}
# new_nhy={}
# for k in nhy:
# new_k = k.decode()#把k转成字符串
# v = nhy[k]
# new_v= v.decode()#把v转成字符串
# new_nhy[new_k]=new_v
# print(new_nhy)
# print(r.type('lsx'))
#需求是把一个redis库里面所有的数据,导入到另一个redis里面
#1、r1 和r2 连接上r1和r2两个数据库
#2、 获取到r1上面所有的key keys
#3、判断key的类型,r.type(k),get hgetall .hset() .set()
r1=redis.Redis(host='211.149.218.16',port=6378,password='123456',db=2)#获取数据
r2=redis.Redis(host='211.149.218.16',port=6378,password='123456',db=3)#写数据
keys = r1.keys()#r1数据库上所有的key
for k in keys:
if r1.type(k)==b'hash':#判断是否为哈希类型,因为redis里面返回的数据都是bytes类型的,
#所以在hash前面加上b
hash_data = r1.hgetall(k)#获取哈希的类型的数据
for k2,v in hash_data.items():#循环刚才获取到的字典
r2.hset(k,k2,v)#set哈希类型的值
else:
v = r1.get(k)#从r1里面获取值,
r2.set(k,v)#set进去
操作mysql数据库
def op_mysql(host,user,passwd,db,sql,port=3306,charset='utf8'):
import pymysql
from pymysql.cursors import DictCursor#游标返回数据是字典
#建立连接
coon = pymysql.connect(host=host,user=user,passwd=passwd,db=db,charset=charset,port=port)
cur = coon.cursor(DictCursor)#建立游标,返回时一个字典
cur.execute(sql)#执行sql语句
if sql.strip().startswith('select'):#判断是都以select开头,并且去除空格
res = cur.fetchall()#获取全部数据
print(res)
else:
coon.commit()#只要不是查询语句都需要进行提交
res = 'ok'
cur.close()#关闭游标
coon.close()#关闭连接
print(res)
return res
sql1 = 'insert into user values(5,"szq","123456",3000);'
sql2 = 'update user set username="hxm" where id=5;'
sql3 = 'delete from user where id=5;'
sql4 = 'select * from user where id=1;'
op_mysql(host='192.168.247.131',port=3306,user='root',passwd='123456',db='wjx',sql=sql1)
op_mysql(host='192.168.247.131',port=3306,user='root',passwd='123456',db='wjx',sql=sql2)
op_mysql(host='192.168.247.131',port=3306,user='root',passwd='123456',db='wjx',sql=sql3)
op_mysql(host='192.168.247.131',port=3306,user='root',passwd='123456',db='wjx',sql=sql4)