Python 操作数据库

Posted 安柠筱洁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 操作数据库相关的知识,希望对你有一定的参考价值。

一,安装数据库

pip install pymysql

pip install redis 

二,Python 操作mysql数据库

import pymysql
def op_mysql(host,user,password,db,sql,port=3306,charset=\'utf8\'):#通用数据库操作
conn = pymysql.connect(host=host,user=user,
password=password,
port=port,
charset=charset,db=db) #建立连接
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标 来向服务器发送命令以及接收结果(找个仓库管理员帮你拿东西)
cur.execute(sql) #执行sql 语句
sql_start = sql[:6].upper() #取sql前6个字符串,判断它是什么类型的sql语句
if sql_start==\'SELECT\' :
res = cur.fetchall()
# res = cur.fetchone()#只有一条数据,那么就用fetchone,超过一条数据那就用fetchall
else:#update insert delete 操作
conn.commit() #提交
res = \'ok\'
cur.close() #关闭游标
conn.close() #关闭连接
return res
调用函数:
sql = \'select * from bt_stu limit 5;\'
sql2 = \'update my_user set money = "%s" where username= "%s";\' % (actual_account,user) #注意引号的位置
res = op_mysql(
host=\'211.149.218.16\',
user=\'jxz\',password=\'123456\',#port这里一定要写int类型
port=3306,db=\'jxz\',charset=\'utf8\',sql=sql2)
print(res)

三,Python 操作redis 数据库

启动redis 服务: 进入 redis-server  -> cmd  -> redis-server.exe redis.windows.conf

操作redis 

1,string 类型

r = redis.Redis(host=\'127.0.0.1\',port=6379,db=2)#连上redis
r.set(\'nhy_session\',\'201801211505\') #set数据
print(r.get(\'nhy_session\').decode()) #redis里面取出来的数据都是bytes类型的,所以要用.decode方法转成字符串
print(r.get(\'nhy_session\'))
r.delete(\'nhy_session\')#删除一个
r.setex(\'nhy\',\'hahah\',20) #可以指定key的失效时间,单位是秒‘
# set get delete setex 都是针对string类型的 k - v

 


2,hash 类型 (没有过期时间)

r = redis.Redis(host=\'127.0.0.1\',port=6379,db=2)#连上redis
r.hset(\'sessions\',\'nhy\',\'123456\') #插入数据
r.hset(\'sessions\',\'ybq\',\'1234562\')
r.hset(\'sessions\',\'xsr\',\'1234561\')
print(r.hget(\'sessions\',\'xsr\')) #获取数据
redis_data = r.hgetall(\'sessions\') #获取到hash类型里面所有的数据
print(redis_data)
all_data = {}
for k,v in redis_data.items(): #把hash类型里面所有的数据转成正常的字典
k = k.decode()
v = v.decode()
all_data[k]=v
print(all_data)
输出结果:

b\'1234561\'
{b\'ybq\': b\'1234562\', b\'xsr\': b\'1234561\', b\'nhy\': b\'123456\'}
{\'ybq\': \'1234562\', \'xsr\': \'1234561\', \'nhy\': \'123456\'}

3,层级类型  (有文件夹)

import redis
r = redis.Redis(host=\'127.0.0.1\',port=6379,db=2)#连上redis
r.set(\'txz:llq\',\'llq123\') #
r.set(\'txz:llq12\',\'llq1234\') #
r.set(\'txz:llq13:llq13\',\'llq1234\')
print(r.keys())#获取所有的key
print(r.keys(\'txz*\')) #以txz开头的key
print(r.type(\'sessions\'))#获取key的类型
输出结果:

[b\'txz:llq12\', b\'txz:llq\', b\'nhy_session\', b\'sessions\', b\'txz:llq13:llq13\']
[b\'txz:llq12\', b\'txz:llq\', b\'txz:llq13:llq13\']
b\'hash\'

 

 

  4,操作redis 数据库string 类型通用函数

import redis
def op_redis(host,password,k,v=None,port=6379,db=0): #操作redis 数据库string 类型通用函数
r = redis.Redis(host=host,password=password,port=port,db=db)
if v:
r.set(k,v)
res = \'ok\'
else:
res = r.get(k)
if res: #这里是判断有没有get到数据
res = res.decode()
else:
res = None
return res

四,redis 数据库备份

import redis
# 1、建立两个redis连接
#1、src
# 2、 target
#2、获取到所有的key,kyes ()
# 3、判断key的类型,string hash
import redis
src_redis = redis.Redis(host=\'211.149.218.16\',port=6379,password=\'123456\',db=2)#连上redis
target_redis = redis.Redis(host=\'211.149.218.16\',port=6379,password=\'123456\',db=14)#连上redis
for key in src_redis.keys():
if src_redis.type(key) == b\'string\': #判断key的类型,因为redis数据取出来都是二进制的,所以这里也用bytes
v = src_redis.get(key) #先获取到原来的数据
target_redis.set(key,v) #再set到新的里面
else:
all_hash_data = src_redis.hgetall(key) #先获取到hash类型里面所有的数据
for k,v in all_hash_data.items(): #因为hash类型的获取到之后是一个字典,所以这里循环字典
target_redis.hset(key,k,v) #key是外面的大key,k是里面的小k,v就是小k对应的value

 

以上是关于Python 操作数据库的主要内容,如果未能解决你的问题,请参考以下文章

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')(代码片段

常用python日期日志获取内容循环的代码片段

python 有用的Python代码片段

Python 向 Postman 请求代码片段

Python - 循环加速 - 大型数据集

VSCode自定义代码片段——git命令操作一个完整流程