python筆記:mysql、redis操作方法
模塊安裝:
數(shù)據(jù)操作用到的模塊pymysql,需要通過pip install pymysql進行安裝。
redis操作用的模塊是redis,需要通過pip install redis進行安裝。
檢驗是否安裝成功:進入到Python命令行模式,輸入import pymysql、 import redis ,無報錯代表成功;
mysql操作方法如下:
查詢數(shù)據(jù):fetchone、fetchmany(n)、fetchall()
import pymysql #建立mysql連接,ip、端口、用戶名、密碼(passwd,不能寫成其他,例如:pwd或者p,否則報錯)、庫名 conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8') #創(chuàng)建游標(biāo) cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的類型為字典,返回結(jié)果類型是字典,不再是元組 #執(zhí)行sql,返回值是int,查詢出來的結(jié)果有幾條 cur.execute('select * from test') #獲取第一條數(shù)據(jù),游標(biāo)cur所在的位置為1,游標(biāo)從0開始,查詢結(jié)果類型為:字典 row_1 = cur.fetchone() cur.scroll(0, mode='absolute') #將游標(biāo)移動到初始位置 #獲取前n行數(shù)據(jù) row_2 = cur.fetchmany(n) cur.scroll(0, mode='absolute') #將游標(biāo)移動到初始位置 #獲取所有數(shù)據(jù),返回結(jié)果類型是:list,里面元素是字典 row_3 = cur.fetchall() cur.scroll(0, mode='absolute') #將游標(biāo)移動到初始位置 print(row_2) #關(guān)閉游標(biāo) cur.close() #關(guān)閉連接 conn.close()
增加、更新、刪除數(shù)據(jù)
import pymysql #建立mysql連接 conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8') #創(chuàng)建游標(biāo) cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的類型為字典,返回結(jié)果類型是字典,不再是元組 #執(zhí)行sql sql = 'insert into test values(5, "斷點", "e10adc3949ba59abbe56e057f20f883e")' sql_update = 'update test set name="薛之謙" where id=2 ' sql_del = 'delete from test where id = 3' cur.execute(sql_del) #insert、update、delete語句需要進行commit,否則無法保證修改或者新建的數(shù)據(jù) conn.commit() #關(guān)閉游標(biāo) cur.close() #關(guān)閉連接 conn.close()
cursor的相對、絕對位置移動
import pymysql #建立mysql連接 conn = pymysql.connect(host='192.168.3.66', user='root', passwd='123456', db='szz', port=3306, charset='utf8') #創(chuàng)建游標(biāo) cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定cursor的類型為字典,返回結(jié)果類型是字典,不再是元組 num = cur.execute('select * from testlhl') print(num) #返回結(jié)果是int類型 row_1 = cur.fetchone() # 此時游標(biāo)的位置在1,數(shù)據(jù)庫取值從0下標(biāo)開始,獲取數(shù)據(jù)庫第一條數(shù)據(jù) cur.scroll(2, mode='absolute') #absolute絕對位置,直接是將游標(biāo)從0位置移動到指定的位置2 row_2 = cur.fetchone() #讀取數(shù)據(jù)庫第3條數(shù)據(jù),游標(biāo)在3位置 cur.scroll(2, mode='relative') #relative相對位置,相對于游標(biāo)當(dāng)前所在位置,進行移動,移動1位,游標(biāo)在4位置,若相對移動的位置超過下標(biāo),則報out of range row_3 = cur.fetchone() #讀取第5條數(shù)據(jù) #關(guān)閉游標(biāo) cur.close() #關(guān)閉連接 conn.close()
mysql的增刪改查公共方法,代碼如下:
def getconn(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) #建立游標(biāo)并指定游標(biāo)類型 cur.execute(sql) #執(zhí)行sql if sql.startswith('select'): #判斷sql是否是select res = cur.fetchone() else: conn.commit() #insert\delete\update語句執(zhí)行完畢后需要進行commit res = 88 cur.close() #關(guān)閉游標(biāo) conn.close() #關(guān)閉連接 return res
redis操作方法如下:
key的類型是string,進行set操作,模式{key, value},如下:
import redis db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db) #給redis添加值,傳值方式是key-value,key不可重復(fù),value的形式盡量是string,也可以傳list、字典,redis內(nèi)存放的是字節(jié)res = conn_redis.set('name', 'testredis') #print(res) #返回值是布爾類型,set成功,則返回true conn_redis.set('days', '[10,4,5,12,44]') #set key值到redis內(nèi),且可以設(shè)置過期時間,10s result = conn_redis.setex('session', 'abcder1233@sdfrr', 10) #單位是s print(result) #返回值是布爾類型,set成功,則返回true #批量插入redis,可以寫入多個key-valye conn_redis.mset(a='xiaohei', b='xiaobai', c='xiaohuang') #設(shè)置key時,可以設(shè)置文件夾,user文件夾,key:test,value:haha conn_redis.set('user:test','haha')
獲取redis內(nèi)的數(shù)據(jù),通過key值進行獲取
import redis import json db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db) #獲取redis的值,返回結(jié)果類型是bytes res = conn_redis.get('abcd') #使用decode()將bytes類型轉(zhuǎn)換為字符串:輸出>>>>>testredis new_res = res.decode() #使用json的loads,將json串(字符串)轉(zhuǎn)換為字典 dic_res = json.loads(new_res) #獲取不存在的key,返回結(jié)果為None res1 = conn_redis.get('asdfg') print(res1.decode()) #輸出>>>>>>'NoneType' object has no attribute 'decode' #獲取所有的keys,且循環(huán)遍歷進行輸入,使用decode()轉(zhuǎn)換為字符串 list_keys = conn_redis.keys() for key in list_keys: print(key.decode()) #獲取所有的key中以n開頭的key,返回結(jié)果類型是list,元素類型是bytes 輸出>>>>>[b'nbeee', b'name', b'nest'] print(conn_redis.keys('n*'))
刪除redis內(nèi)的值,通過key刪除
import redis db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db) #刪除存在的key,刪除key后,redis內(nèi)不存在該key,返回結(jié)果為1,刪除了一個key res = conn_redis.delete('a') #刪除不存在的key,返回結(jié)果為0,沒有刪除key res1 = conn_redis.delete('d') #刪除多個key,返回結(jié)果n, 刪除了幾個key就返回數(shù)字幾 asdf = conn_redis.delete('a', 'b', 'c') print(asdf)
key的類型是hash,進行set操作,模式:{key,{key1,value}}如下
import redis db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db) #hash類型的key,模式{name,{key,value}},里面key不能重復(fù),返回值為int res = conn_redis.hset('user_session', 'lhl', 'sunny') #hash類型的key,添加值時也可以設(shè)置文件夾 conn_redis.hset('session:redis_test', 'age', 18)
key的類型是hash,進行g(shù)et操作,如下
import redis db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db) #獲取hash類型中的某個name下的某個key對應(yīng)的value ,獲取指定name里面的key的值,返回結(jié)果類似是bytes res = conn_redis.hget('user_session', 'week') #獲取hash類型中name里面所有的key,返回結(jié)果是字典>>>>>輸出:{b'test': b'sunny', b'week': b'sunny'} all = conn_redis.hgetall('user_session')
key的類型是hash,進行delete操作,如下
import redis db = 0 #連接redis,password不簡寫(否則或報錯),db若不寫,則默認(rèn)操作db0 conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db) #hash類型的key,刪除整個key, delete(name),返回結(jié)果為1 res = conn_redis.delete('user_session') #hash類型的key,刪除指定name里的key,若刪除的key或者name不存在,則返回0 res = conn_redis.hdel('user_session', 'week')
redis的set、get公共操作方法如下
def opRedis(host, password, key, value=None, port=6379,db=0): #redis操作時需要傳入key\value conn_redis = redis.Redis(host=host, password=password, port=port, db=db) #獲取redis連接 if value: #判斷value是否傳值,如果不為None,則是set conn_redis.setex(key, value, 60) #設(shè)置key的過期時間,60s res = 88 else: res = conn_redis.get(key).decode() #將從redis內(nèi)讀取的值,由bytes轉(zhuǎn)換為字符串 return res
以上這篇python筆記:mysql、redis操作方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python自制包并用pip免提交到pypi僅安裝到本機【推薦】
這篇文章主要介紹了python自制包并用pip免提交到pypi僅安裝到本機,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06Python執(zhí)行外部命令subprocess的使用詳解
subeprocess模塊是python自帶的模塊,無需安裝,主要用來取代一些就的模塊或方法,本文通過實例代碼給大家分享Python執(zhí)行外部命令subprocess及使用方法,感興趣的朋友跟隨小編一起看看吧2021-05-05Python中表達式x += y和x = x+y 的區(qū)別詳解
這篇文章主要跟大家介紹了關(guān)于Python中x += y和x = x+y 的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解
這篇文章主要介紹了Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法,結(jié)合實例形式詳細(xì)分析了Python爬蟲爬取網(wǎng)頁數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11基于tf.shape(tensor)和tensor.shape()的區(qū)別說明
這篇文章主要介紹了基于tf.shape(tensor)和tensor.shape()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python自動化測試ConfigParser模塊讀寫配置文件
本文主要介紹Python自動化測試,這里詳細(xì)說明了ConfigParser模塊讀寫配置文件,有興趣的小伙伴可以參考下2016-08-08