標籤:port 技術 pymysql image 分享圖片 類型 art char one
一,安裝資料庫
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 Database Backup
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 操作資料庫