Python操作資料庫(mysql redis)

來源:互聯網
上載者:User

標籤:relative   設定   資料   abs   etc   sql資料庫   遊標   字串   update   

一、python操作mysql資料庫:

資料庫資訊:(例如211.149.218.16   szz  123456)

操作mysql用pymysql模組                  

#操作其他資料庫,就安裝相應的模組

import  pymysql

ip=’211.149.218.16’

port=3306

passwd=’123456’

user=’root’

db=’szz’

conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,charset=’utf8’)         #建立一個資料庫連接

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)             #在串連上建立一個遊標,通過遊標去操作資料庫;括弧裡指定遊標的類型為字典(指定為字典,方便取值),不指定預設為元組

sql=’insert into nhy(id,name,sex) VALUE (1,’hn’,’nv’);’               #寫sql語句

sql2=’select * from nhy;’

cur.execute(sql)               #執行sql語句

cur.execute(sql2)

row_1 = cur.fetchone()                    #擷取查詢結果的第一條資料,返回的是一個元組,每執行一次就擷取一行

row_2 = cur.fetchmany(3)                     # 擷取前n行資料,此時遊標在n條資料後面

row_3 = cur.fetchall()              # 擷取所有資料,此時遊標在最後面

PS:(

fetchall和fetchone的區別:

如果select本身取的時候有多條資料時:

cursor.fetchone():將只取最上面的第一條結果,返回單個元組如(‘id‘  ,‘title‘),   然後多次使用cursor.fetchone(),依次取得下一條結果,直到為空白。

cursor.fetchall() :將返回所有結果,返回二維元組,如((‘id‘,‘title‘),(‘id‘,‘title‘)),

如果select本身取的時候只有一條資料時:

cursor.fetchone():將只返回一條結果,返回單個元組如(‘id‘,‘title‘)。

cursor.fetchall() :也將返回所有結果,返回二維元組,如((‘id‘,‘title‘),),

)

cur.scroll(n,mode=’absolute’)         #移動遊標,mode=absolute或relative, absolute指把遊標移到資料的第n行,relative的意思是把遊標移動到當前遊標所在行+n行的位置

cur.scroll(0,mode=’absolute’)             #把遊標移動到最前面,不管遊標在哪

conn.commit()           #ddl(insert delete update)dcl dml語句必須提交才生效,不然無法儲存建立或者修改的資料

cur.close()             #關閉遊標

conn.close()               #關閉資料庫連接

 

======eg:寫操作mysql的函數:

import pymysql

def OperationDb(host,user,passwd,port,db,sql,charset=‘utf8‘):  #傳參

         pymysql.connect(host=host,user=user,passwd=passwd ,port=port,db=db,charset=charset)  #建立串連

         cur = conn.cursor(cursor=pymysql.cursors.DictCursor)   #建立遊標

         cur.execute(sql)  #執行sql語句

         if sql.startswith(‘select‘):   #判斷字串是不是以什麼開頭

                   res=cur.fetchall()     #判斷如果是select語句,直接返回出執行結果,不用commit了

         else:

                   conn.commit()   #如果是insert delete update等語句,則需要提交

                   res=00   #如果不是select語句,返回00

         cur.close()

         conn.close()

         return  res

ss=OperationDb(

         host=‘211.149.147.233‘,user=‘byz‘,passwd=‘123456‘,db=‘byz‘,sql=‘insert into hn(id,name,sex)  VALUE(08,"houning","female") ;‘

)                     #外面用單引號,sql語句裡面要用雙引號;#調用這個函數,並傳參,把這個函數的值賦給ss

                

print(ss)        #列印出ss,即函數體裡的res

 

操作redis:

redis是一個nosql類型的資料庫(安裝Redis Desktop Manager ),裡面存的是索引值對,索引值對資料都存在記憶體中,有很快的讀寫速度;python操作redis需要使用redis模組,pip安裝即可。

#======下面是操作字串類型的,key都是string類型

         import redis

    r = redis.Redis(host=‘127.0.0.1‘,port=6379,db=0,password=’123456’)    #指定串連redis的ip、連接埠號碼以及哪個資料庫、密碼

    r.set(‘name‘, ‘houning‘)    #設定key和value;name是欄位,houning是值;如果name的值已存在,這樣寫就會把原來的值替換掉;

    r.setnx(‘name2‘, ‘value‘)    #設定的name的值,如果name不存在的時候才會設定

    r.setex(‘name3‘, ‘value‘, 30)   #設定的name的值,和失效時間,過了30秒後,name3這個key就會自動失效(因為資料都是存在記憶體當中的,要釋放);比如登入一個網頁,10分鐘後,就需要重新登入,這裡就用到了redis的失效時間

    r.mset(k1=‘v1‘,k2=‘v2‘)     #大量設定多個值,不能設定失效時間

n=r.get(‘name‘)     #擷取name的值,redis裡面擷取到的都是bytes類型;

print(n.decode())    # redis裡存進去的都是字串,但擷取出來的是bytes類型;decode方法是把bytes類型的結果轉換成string類型的

print(json.loads(n.decode()))    #把字串類型再轉換成字典或list類型的

    print(r.mget(‘k1‘,‘k2‘))    #批量擷取key

    r.delete(‘name‘)     #刪除值

    r.delete(‘k1‘,‘k2‘)     #大量刪除

         print(r.keys())        #擷取所有的key

 

#======下面是操作雜湊類型的key

         import redis

    r = redis.Redis(host=‘127.0.0.1‘,port=6379,db=0,password=’123456’)    #指定串連redis的ip、連接埠號碼以及哪個資料庫、密碼

    r.hset(‘hname‘, ‘hn‘, ‘123456‘)          #設定雜湊類型hname的值,hname是外面的key,hn是裡面的key,123456是裡面key的值

    r.hset(‘hname‘, ‘zg‘, ‘456789‘)         #繼續給hname設定雜湊類型的值

    r.hsetnx(‘hname‘,‘key2‘,‘value23‘)            #為hname設定裡面的key和value,hname這個key不存在的時候才會設定

    r.hmset(‘hname‘,{‘k1‘:‘v1‘,‘k2‘:‘v2‘})     #大量設定雜湊類型hname的key和value

    r.hget(‘hname‘, ‘hn‘)     #擷取hname裡hn的值,取出來是123456

    print(r.hgetall(‘hname‘))    #擷取hname裡面所有的key和value,是一個字典

    r.hdel(‘hname‘,‘hn‘)      #刪除雜湊類型hname裡,指定的hn值

    print(r.keys())         #擷取所有的key

PS:

r.set(‘user:houning‘,‘123456‘)    #設定key時,如果帶冒號,則會在redis上自動建一個user的檔案夾,檔案夾裡存的key和value值為:user_houning,123456

r.hset(‘session:test‘,‘houning‘,‘123456‘)    #雜湊類型的同上,會自動建立一個session的檔案夾,外面的值為“test”,裡面的key和value是:houning,123456

 

====== eg:寫操作redis的函數

def  OperationRedis(host,passwd,k,v=False,port=6379,db=0):    #因為set值時,key和value都得填,所以把v設定成預設值參數

         r=redis.Redis(host=host,password=passwd,port=port,db=db)

        

         if v:                  #如果傳了v的值,則設定key和value

                   r.set(k,v)

                   res=88

         else:                  #沒有傳v的值

                   res=r.get(k).encode()        #轉換成字串類型

         return  res

Python操作資料庫(mysql redis)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.