我們在寫代碼的時候,經常會操作數據庫,增刪改查,數據庫有很多類型,關系型數據庫和非關系數據庫,這里咱們介紹一下python怎么操作mysql、redis和mongodb。
一、python操作mysql數據庫 python3中操作mysql數據需要安裝一個第三方模塊,pymysql,使用pip install pymysql安裝即可,在python2中是MySQLdb模塊,在python3中沒有MySQLdb模塊了,所以使用pymysql。
import pymysql # 創建連接,指定數據庫的ip地址,賬號、密碼、端口號、要操作的數據庫、字符集
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8') # 創建游標
cursor = conn.cursor() # 執行SQL,並返回收影響行數
effect_row = cursor.execute("update students set name = 'niuhy' where id = 1;") # 執行SQL,並返回受影響行數
#effect_row = cursor.execute("update students set name = 'niuhy' where id = %s;", (1,))
# 執行SQL,並返回受影響行數
effect_row = cursor.executemany("insert into students (name,age) values (%s,%s); ", [("andashu",18),("12345",20)]) #執行select語句
cursor.execute("select * from students;") #獲取查詢結果的第一條數據,返回的是一個元組
row_1 = cursor.fetchone() # 獲取前n行數據
row_2 = cursor.fetchmany(3) # 獲取所有數據
row_3 = cursor.fetchall() # 提交,不然無法保存新建或者修改的數據
conn.commit() # 獲取最新自增ID
new_id = cursor.lastrowid print(new_id) # 關閉游標
cursor.close() # 關閉連接
conn.close() 上面的操作,獲取到的返回結果都是元組,如果想獲取到的結果是一個字典類型的話,可以使用下面這樣的操作 import pymysql # 創建連接,指定數據庫的ip地址,賬號、密碼、端口號、要操作的數據庫、字符集
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8') # 創建游標
cursor = conn.cursor() cursor = coon.cursor(cursor=pymysql.cursors.DictCursor)#需要指定游標的類型,字典類型
# 執行SQL
cursor.execute("select * from user;") #獲取返回結果,這個時候返回結果是一個字典
res = cursor.fetchone()#返回一條數據,如果結果是多條的話
print(res) res2 = cursor.fetchall()#所有的數據一起返回
二、操作redis redis是一個nosql類型的數據庫,數據都存在內存中,有很快的讀寫速度,python操作redis使用redis模塊,pip安裝即可
import redis r = redis.Redis(host='127.0.0.1',port=6379,db=0)#指定連接redis的端口和ip以及哪個數據庫
r.set('name', 'value')#set string類型的值
r.setnx('name2', 'value')#設置的name的值,如果name不存在的時候才會設置
r.setex('name3', 'value', 3)#設置的name的值,和超時時間,過了時間key就會自動失效
r.mset(k1='v1',k2='v2')#批量設置值
r.get('name')#獲取值
print(r.mget('k1','k2'))#批量獲取key
r.delete('name')#刪除值
r.delete('k1','k2')#批量刪除
#======下面是操作哈希類型的
r.hset('hname', 'key', 'value')#set 哈希類型的值
r.hset('hname', 'key1', 'value2')#set 哈希類型的值
r.hsetnx('hname','key2','value23')#給name為hname設置key和value,和上面的不同的是key不存在的時候
#才會set
r.hmset('hname',{'k1':'v1','k2':'v2'})#批量設置哈希類型的key和value
r.hget('name', 'key')#獲取哈希類型的值
print(r.hgetall('hname'))#獲取這個name里所有的key和value
r.hdel('hname','key')#刪除哈希類型的name里面指定的值
print(r.keys())#獲取所有的key
redis-py使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然后作為參數Redis,這樣就可以實現多個Redis實例共享一個連接池。
import redis pool = redis.ConnectionPool(host='127.0.0.1', port=9212) r = redis.Redis(connection_pool=pool) r.set('one', 'first') r.set('two', 'second') print r.get('one') print r.get('two')
