模塊安裝:
數(shù)據(jù)操作用到的模塊pymysql,需要通過(guò)pip install pymysql進(jìn)行安裝。
redis操作用的模塊是redis,需要通過(guò)pip install redis進(jìn)行安裝。
檢驗(yàn)是否安裝成功:進(jìn)入到Python命令行模式,輸入import pymysql、 import redis ,無(wú)報(bào)錯(cuò)代表成功;
mysql操作方法如下:
查詢(xún)數(shù)據(jù):fetchone、fetchmany(n)、fetchall()
import pymysql#建立mysql連接,ip、端口、用戶(hù)名、密碼(passwd,不能寫(xiě)成其他,例如:pwd或者p,否則報(bào)錯(cuò))、庫(kù)名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的類(lèi)型為字典,返回結(jié)果類(lèi)型是字典,不再是元組#執(zhí)行sql,返回值是int,查詢(xún)出來(lái)的結(jié)果有幾條cur.execute('select * from test')#獲取第一條數(shù)據(jù),游標(biāo)cur所在的位置為1,游標(biāo)從0開(kāi)始,查詢(xún)結(jié)果類(lèi)型為:字典row_1 = cur.fetchone()cur.scroll(0, mode='absolute') #將游標(biāo)移動(dòng)到初始位置#獲取前n行數(shù)據(jù)row_2 = cur.fetchmany(n)cur.scroll(0, mode='absolute') #將游標(biāo)移動(dòng)到初始位置#獲取所有數(shù)據(jù),返回結(jié)果類(lèi)型是:list,里面元素是字典row_3 = cur.fetchall()cur.scroll(0, mode='absolute') #將游標(biāo)移動(dòng)到初始位置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的類(lèi)型為字典,返回結(jié)果類(lèi)型是字典,不再是元組#執(zhí)行sqlsql = 'insert into test values(5, "斷點(diǎn)", "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語(yǔ)句需要進(jìn)行commit,否則無(wú)法保證修改或者新建的數(shù)據(jù)conn.commit()#關(guān)閉游標(biāo)cur.close()#關(guān)閉連接conn.close()
cursor的相對(duì)、絕對(duì)位置移動(dòng)
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的類(lèi)型為字典,返回結(jié)果類(lèi)型是字典,不再是元組num = cur.execute('select * from testlhl')print(num) #返回結(jié)果是int類(lèi)型row_1 = cur.fetchone() # 此時(shí)游標(biāo)的位置在1,數(shù)據(jù)庫(kù)取值從0下標(biāo)開(kāi)始,獲取數(shù)據(jù)庫(kù)第一條數(shù)據(jù)cur.scroll(2, mode='absolute') #absolute絕對(duì)位置,直接是將游標(biāo)從0位置移動(dòng)到指定的位置2row_2 = cur.fetchone() #讀取數(shù)據(jù)庫(kù)第3條數(shù)據(jù),游標(biāo)在3位置cur.scroll(2, mode='relative') #relative相對(duì)位置,相對(duì)于游標(biāo)當(dāng)前所在位置,進(jìn)行移動(dòng),移動(dòng)1位,游標(biāo)在4位置,若相對(duì)移動(dòng)的位置超過(guò)下標(biāo),則報(bào)out of rangerow_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)類(lèi)型 cur.execute(sql) #執(zhí)行sql if sql.startswith('select'): #判斷sql是否是select res = cur.fetchone() else: conn.commit() #insert/delete/update語(yǔ)句執(zhí)行完畢后需要進(jìn)行commit res = 88 cur.close() #關(guān)閉游標(biāo) conn.close() #關(guān)閉連接 return resredis操作方法如下:
key的類(lèi)型是string,進(jìn)行set操作,模式{key, value},如下:
import redisdb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_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) #返回值是布爾類(lèi)型,set成功,則返回trueconn_redis.set('days', '[10,4,5,12,44]')#set key值到redis內(nèi),且可以設(shè)置過(guò)期時(shí)間,10sresult = conn_redis.setex('session', 'abcder1233@sdfrr', 10) #單位是sprint(result) #返回值是布爾類(lèi)型,set成功,則返回true#批量插入redis,可以寫(xiě)入多個(gè)key-valyeconn_redis.mset(a='xiaohei', b='xiaobai', c='xiaohuang') #設(shè)置key時(shí),可以設(shè)置文件夾,user文件夾,key:test,value:hahaconn_redis.set('user:test','haha')獲取redis內(nèi)的數(shù)據(jù),通過(guò)key值進(jìn)行獲取
import redisimport jsondb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)#獲取redis的值,返回結(jié)果類(lèi)型是bytesres = conn_redis.get('abcd')#使用decode()將bytes類(lèi)型轉(zhuǎn)換為字符串:輸出>>>>>testredisnew_res = res.decode()#使用json的loads,將json串(字符串)轉(zhuǎn)換為字典dic_res = json.loads(new_res)#獲取不存在的key,返回結(jié)果為Noneres1 = conn_redis.get('asdfg')print(res1.decode()) #輸出>>>>>>'NoneType' object has no attribute 'decode'#獲取所有的keys,且循環(huán)遍歷進(jìn)行輸入,使用decode()轉(zhuǎn)換為字符串list_keys = conn_redis.keys()for key in list_keys: print(key.decode())#獲取所有的key中以n開(kāi)頭的key,返回結(jié)果類(lèi)型是list,元素類(lèi)型是bytes 輸出>>>>>[b'nbeee', b'name', b'nest']print(conn_redis.keys('n*'))刪除redis內(nèi)的值,通過(guò)key刪除
import redisdb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#刪除存在的key,刪除key后,redis內(nèi)不存在該key,返回結(jié)果為1,刪除了一個(gè)keyres = conn_redis.delete('a')#刪除不存在的key,返回結(jié)果為0,沒(méi)有刪除keyres1 = conn_redis.delete('d')#刪除多個(gè)key,返回結(jié)果n, 刪除了幾個(gè)key就返回?cái)?shù)字幾asdf = conn_redis.delete('a', 'b', 'c')print(asdf)key的類(lèi)型是hash,進(jìn)行set操作,模式:{key,{key1,value}}如下
import redisdb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#hash類(lèi)型的key,模式{name,{key,value}},里面key不能重復(fù),返回值為intres = conn_redis.hset('user_session', 'lhl', 'sunny')#hash類(lèi)型的key,添加值時(shí)也可以設(shè)置文件夾conn_redis.hset('session:redis_test', 'age', 18)key的類(lèi)型是hash,進(jìn)行g(shù)et操作,如下
import redisdb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#獲取hash類(lèi)型中的某個(gè)name下的某個(gè)key對(duì)應(yīng)的value ,獲取指定name里面的key的值,返回結(jié)果類(lèi)似是bytesres = conn_redis.hget('user_session', 'week')#獲取hash類(lèi)型中name里面所有的key,返回結(jié)果是字典>>>>>輸出:{b'test': b'sunny', b'week': b'sunny'}all = conn_redis.hgetall('user_session')key的類(lèi)型是hash,進(jìn)行delete操作,如下
import redisdb = 0#連接redis,password不簡(jiǎn)寫(xiě)(否則或報(bào)錯(cuò)),db若不寫(xiě),則默認(rèn)操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#hash類(lèi)型的key,刪除整個(gè)key, delete(name),返回結(jié)果為1res = conn_redis.delete('user_session')#hash類(lèi)型的key,刪除指定name里的key,若刪除的key或者name不存在,則返回0res = conn_redis.hdel('user_session', 'week')redis的set、get公共操作方法如下
def opRedis(host, password, key, value=None, port=6379,db=0): #redis操作時(shí)需要傳入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的過(guò)期時(shí)間,60s res = 88 else: res = conn_redis.get(key).decode() #將從redis內(nèi)讀取的值,由bytes轉(zhuǎn)換為字符串 return res
以上這篇python筆記:mysql、redis操作方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選