python操作mysql,redis

import pymysql
ip ="127.0.0.1"#数据库地址
user = 'username'#数据库用户名
password="pwd"#数据库密码
db='db_name'#数据库
port=3306#端口
charset='utf8'#设置字符集
conn = pymysql.connect(host=ip,user=user,password=password,db=db,port=port,charset=charset,autocommit=True)#建立连接

cur = conn.cursor(pymysql.cursors.DictCursor) #游标

sql = 'select * from tb_name limit 5;'

cur.execute(sql)#执行sql语句,insert 、update 、delete
#conn.commit() #提交
all = cur.fetchall()
# one = cur.fetchone()
# many = cur.fetchmany(2)
cur.close()
conn.close()

# print(one)
# print(many)
print(all)


def op_mysql(sql,many=True):
db_info = {'user': 'username', 'password': 'pwd',
'host': '127.0.0.1', 'db': 'db_name', 'port': 3306, 'charset': 'utf8',
'autocommit': True}
conn = pymysql.connect(**db_info) # 建立连接
cur = conn.cursor(pymysql.cursors.DictCursor) # 游标
cur.execute(sql) # 执行sql语句,insert 、update 、delete
if many ==True:
result = cur.fetchall()
else:
result = cur.fetchone()
cur.close()
conn.close()
return result
==============================================================================================

import redis

#关系型数据库
#mysql oracle sqlserver、sqlite


#非关系型数据库 NoSQL
# mongodb
# redis 每秒钟达到10w次的读写,存在内存里面
r = redis.Redis(host='127.0.0.1',password='pwd',port=6379,db=0,decode_responses=True)

#字符串
r.set('key','value')
info = r.get('key')
r.expire('key',30)#设置失效时间
r.delete('key')#删除key

#哈希类型

r.hset("KEY",'key','{"age":12,"addr":"北京"}')#写入大KEY小key
r.hdel("KEY",'key')#删除大KEY小key
print(r.hget("KEY","key"))
print(r.hgetall('KEY')) #获取所有的
d = {'qxh':'sfdsdfsf','liuying':'liy001'}
r.hmset('students',d)


r.flushall() #清空所有数据库的所有内容
r.flushdb() #清空当前数据库里面的数据
r.exists('name') #判断key是否存在
r.keys() #获取当前数据库所有的key
r.type('name') #获取的key的类型

#1、从aredis里面获取所有的key,
#2、判断key的类型
#3、根据key的类型,使用set /hset
#4、set到bredis里面


import pymysql,xlwt,os
#读取数据库存储到excel
filepath =os.path.join(os.getcwd()+os.path.sep+'student_info.xls')
print(filepath)
def sel_db(tbname):#返回一个列表 里面元素是字典
    db_info = {
        'host':'127.0.0.1',
        'user':'root',
        'password':'xxxxxx',
        'port':3306,#必须是int类型
        'db':'test'
    }
    conn = pymysql.connect(**db_info)#连接数据库
    cur = conn.cursor(pymysql.cursors.DictCursor)#输出是字典这么建游标
    cur.execute('select * from %s'%tbname)
    return cur.fetchall()

def write_excel(filename):
    book=xlwt.Workbook()
    sheet=book.add_sheet('test')
    for col,title in enumerate(sel_db('Student')[0]):#写表头,字典元素的key是表头
        sheet.write(0,col,title)
    for row,item in enumerate(sel_db('Student')):#写数据,value是每行每列的数据
        for col1,value in enumerate(item.values()):
            sheet.write(row+1,col1,value)
    book.save(filename)
write_excel(filepath)
import redis
#redis中存的都是bytes类型
redis_info={
    'host':'127.0.0.1',
    'port':6379,
    'db':7,
    'decode_responses':True#直接bytes转成str
}
redis_info1={
    'host':'127.0.0.1',
    'port':6379,
    'db':5,
    'decode_responses':True#直接bytes转成str
}
conn_redis = redis.Redis(**redis_info)
conn_redis1 = redis.Redis(**redis_info1)
#redis的类型(string)
conn_redis.set('test','test')#增数据,改数据
redis_data = conn_redis.get('test')#bytes类型
# print(redis_data.decode())#转成字符串,encode()字符串转bytes

conn_redis.set('test1','test1',30)#过期时间 设置30秒
# conn_redis.delete('test')#删数据

#redis的类型(hash)
conn_redis.hset('stu','mm','{"age":19}')
conn_redis.hset('stu','mh','{"age":29}')
conn_redis.hset('stu','hh','{"age":39}')
print(conn_redis.hget('stu','mm'))#拿到某一个小key的value
print(conn_redis.hgetall('stu'))#拿到所有的value
# conn_redis.hdel('stu','hh')#删除一个小key
# conn_redis.delete('stu')#删除大key
# conn_redis.expire('stu',60)#指定某个key的过期时间,只能指定大key
#===========================================================
print(conn_redis.keys())#查看key
print(conn_redis.type('stu'))#查看key的类型
# conn_redis.flushdb()#清空当前数据库
# conn_redis.flushall()#清空所有key 0-15 所有的
print(conn_redis.exists('test1'))#判断key是否存在 返回1,0
#=====================================================
#管道 批量执行
p = conn_redis.pipeline()#建立管道
p.set('key1','value1')#要执行的操作
p.get('key1')#要执行的操作
'''..............'''#要执行的操作
p.execute()#执行 返回一个list 里面是执行的结果

#====================小练习 redis数据迁移
#从database 7 迁移到database 5
p=conn_redis1.pipeline()#用redis1的管道
for k in conn_redis.keys():
    if conn_redis.type(k)=='hash':
        v = conn_redis.hgetall(k)
        for hk,hv in v.items():
            p.hset(k,hk,hv)
    else:
        v = conn_redis.get(k)
        p.set(k,v)
p.execute()

 

posted @ 2019-11-11 11:35  小马哥007  阅读(237)  评论(0编辑  收藏  举报