python筆記7:mysql、redis操作,pythonredis

來源:互聯網
上載者:User

python筆記7:mysql、redis操作,pythonredis
模組安裝:

資料操作用到的模組pymysql,需要通過pip install pymysql進行安裝。

redis操作用的模組是redis,需要通過pip install redis進行安裝。

 檢驗是否安裝成功:進入到Python命令列模式,輸入import pymysql、 import redis ,無報錯代表成功;

mysql操作方法如下: 查詢資料: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')#建立遊標cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組#執行sql,傳回值是int,查詢出來的結果有幾條cur.execute('select * from test')#擷取第一條資料,遊標cur所在的位置為1,遊標從0開始,查詢結果類型為:字典row_1 = cur.fetchone()cur.scroll(0, mode='absolute')   #將遊標移動到初始位置#擷取前n行資料row_2 = cur.fetchmany(n)cur.scroll(0, mode='absolute')   #將遊標移動到初始位置#擷取所有資料,返回結果類型是:list,裡面元素是字典row_3 = cur.fetchall()cur.scroll(0, mode='absolute')   #將遊標移動到初始位置print(row_2)#關閉遊標cur.close()#關閉串連conn.close()
增加、更新、刪除資料:
import pymysql#建立mysql串連conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8')#建立遊標cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組#執行sqlsql = '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,否則無法保證修改或者建立的資料conn.commit()#關閉遊標cur.close()#關閉串連conn.close()
cursor的相對、絕對位置移動
import pymysql#建立mysql串連conn = pymysql.connect(host='192.168.3.66', user='root', passwd='123456', db='szz', port=3306, charset='utf8')#建立遊標cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組num = cur.execute('select * from testlhl')print(num)                                           #返回結果是int類型row_1 = cur.fetchone()             # 此時遊標的位置在1,資料庫取值從0下標開始,擷取資料庫第一條資料cur.scroll(2, mode='absolute')     #absolute絕對位置,直接是將遊標從0位置移動到指定的位置2row_2 = cur.fetchone()             #讀取資料庫第3條資料,遊標在3位置cur.scroll(2, mode='relative')     #relative相對位置,相對於遊標當前所在位置,進行移動,移動1位,遊標在4位置,若相對移動的位置超過下標,則報out of rangerow_3 = cur.fetchone()             #讀取第5條資料#關閉遊標cur.close()#關閉串連conn.close()
 mysql的增刪改查公用方法,代碼如下:
 1 def getconn(host, user, passwd, db, sql, port=3306,charset='utf8'): 2     conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)  #建立串連 3     cur = conn.cursor(cursor=pymysql.cursors.DictCursor)        #建立遊標並指定遊標類型 4     cur.execute(sql)                                            #執行sql 5     if sql.startswith('select'):                                #判斷sql是否是select 6         res = cur.fetchone() 7     else: 8         conn.commit()                                           #insert\delete\update語句執行完畢後需要進行commit
9 res = 8810 cur.close() #關閉遊標11 conn.close() #關閉串連12 return res

 

redis操作方法如下:key的類型是string,進行set操作,模式{key, value},如下:
import redisdb = 0#串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)#給redis添加值,傳值方式是key-value,key不可重複,value的形式盡量是string,也可以傳list、字典,redis記憶體放的是位元組res = conn_redis.set('name', 'testredis')#print(res)    #傳回值是布爾類型,set成功,則返回trueconn_redis.set('days', '[10,4,5,12,44]')
#set key值到redis內,且可以設定到期時間,10sresult = conn_redis.setex('session', 'abcder1233@sdfrr', 10) #單位是sprint(result) #傳回值是布爾類型,set成功,則返回true
#批量插入redis,可以寫入多個key-valye
conn_redis.mset(a='xiaohei', b='xiaobai', c='xiaohuang')
#設定key時,可以設定檔案夾,user檔案夾,key:test,value:haha
conn_redis.set('user:test','haha')
擷取redis內的資料,通過key值進行擷取:
 1 import redis 2 import json 3 db = 0 4 #串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0 5 conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db) 6 #擷取redis的值,返回結果類型是bytes 7 res = conn_redis.get('abcd') 8 #使用decode()將bytes類型轉換為字串:輸出>>>>>testredis 9 new_res = res.decode()10 #使用json的loads,將json串(字串)轉換為字典11 dic_res = json.loads(new_res)12 13 #擷取不存在的key,返回結果為None14 res1 = conn_redis.get('asdfg')15 print(res1.decode())       #輸出>>>>>>'NoneType' object has no attribute 'decode'16 17 #擷取所有的keys,且迴圈遍曆進行輸入,使用decode()轉換為字串18 list_keys = conn_redis.keys()19 for key in list_keys:20     print(key.decode())21 22 #擷取所有的key中以n開頭的key,返回結果類型是list,元素類型是bytes  輸出>>>>>[b'nbeee', b'name', b'nest']23 print(conn_redis.keys('n*'))
刪除redis內的值,通過key刪除:
import redisdb = 0#串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#刪除存在的key,刪除key後,redis內不存在該key,返回結果為1,刪除了一個keyres = conn_redis.delete('a')#刪除不存在的key,返回結果為0,沒有刪除keyres1 = conn_redis.delete('d')#刪除多個key,返回結果n, 刪除了幾個key就返回數字幾asdf = conn_redis.delete('a', 'b', 'c')print(asdf)
key的類型是hash,進行set操作,模式:{key,{key1,value}}如下:
import redisdb = 0#串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#hash類型的key,模式{name,{key,value}},裡面key不能重複,傳回值為intres = conn_redis.hset('user_session', 'lhl', 'sunny')#hash類型的key,添加值時也可以設定檔案夾conn_redis.hset('session:redis_test', 'age', 18) 
key的類型是hash,進行get操作,如下:
import redisdb = 0#串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#擷取hash類型中的某個name下的某個key對應的value ,擷取指定name裡面的key的值,返回結果類似是bytesres = conn_redis.hget('user_session', 'week')#擷取hash類型中name裡面所有的key,返回結果是字典>>>>>輸出:{b'test': b'sunny', b'week': b'sunny'}all = conn_redis.hgetall('user_session')
key的類型是hash,進行delete操作,如下:
import redisdb = 0#串連redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)#hash類型的key,刪除整個key, delete(name),返回結果為1res = conn_redis.delete('user_session')#hash類型的key,刪除指定name裡的key,若刪除的key或者name不存在,則返回0res = conn_redis.hdel('user_session', 'week')
redis的set、get公用操作方法如下:
1 def opRedis(host, password, key, value=None, port=6379,db=0):      #redis操作時需要傳入key\value2     conn_redis = redis.Redis(host=host, password=password, port=port, db=db)   #擷取redis串連3     if value:                           #判斷value是否傳值,如果不為None,則是set4         conn_redis.setex(key, value, 60)   #設定key的到期時間,60s5         res = 886     else:7         res = conn_redis.get(key).decode()     #將從redis內讀取的值,由bytes轉換為字串8     return res

有寫的不對的,或者不明白的,歡迎留言~~~~

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.