1. 程式人生 > >Python操作數據庫(mysql redis)

Python操作數據庫(mysql redis)

tex 行數 元組 cursor nosql sql數據庫 字段 函數 mysql數據庫

一、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)