06 python操作MySQL和redis(進階)
阿新 • • 發佈:2018-07-07
python 數據 交叉 acid execute 維護 incrby insert back
階段一、mysql事務
主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!
事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要麽全部執行,要麽全部不執行。
事務用來管理 insert、update、delete 語句
事務必須滿足4個條件(ACID):原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
原子性:一個事務(transaction)中的所有操作,要麽全部完成,要麽全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
一致性:在事務開始之前和事務結束以後,數據庫的完整性沒有被破壞。
隔離性:數據庫允許多個並發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務並發執行時由於交叉執行而導致數據的不一致。
持久性:事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。
start transaction; # 開啟事務 ? # 插入數據 insert into account value(1, 1000); ? commit;# 提交事務 ? rollback; # 回滾
階段二、python操作mysql
pip install pymysql pip install redis workon py3env ? cd /etc/mysql/mysql.conf.d/ sudo vim mysqld.cnf ? 0.0.0.0 # 所有的ip都能訪問 127.0.0.1 # 只有本地能訪問 ? cd /etc/redis/ sudo vim redis.conf ? 虛擬機解釋器不需要改端口,直接填 3306 6379 # 要操作數據庫,首先就要建立和數據庫的連接,配置pymysql.connect連接數據庫: con = pymysql.connect( host= ‘主機‘, port = 端口, user = ‘用戶名‘, password = ‘密碼‘, db = ‘數據庫名‘, charset = ‘utf8‘ ) print(con) ? # 定義遊標 cursor = con.cursor() cursor.execute(‘show databases‘) #執行sql one = cursor.fetchone() #取出一條數據 all = cursor.fetchall() #取出所有數據 print(one) print(all) ? # 建表 tb = ‘‘‘ create table tb( id int primary key auto_increment, name char(10)) ‘‘‘ cur.execute(tb) ? # 插入 row = cursor.execute("insert into test(name,sex) values(%s,%s)", (‘shiwei‘,‘male‘)) ? # 更新 row = cursor.execute(“update test set name= ‘張三‘ where id = %s", (2,)) ? # 刪除 cursor.execute(‘delete from user where id=%s ‘,(1,) ) ? # 關閉連接 # 事務,數據改動的時候 cur.execute(‘commit‘) con.commit() #提交事物 cursor.close() #關閉遊標 con.close() # 關閉連接 ? ## 聯合查詢 union = ‘‘‘ select s.name, c.name,d.name from `student` s left join `select` se on se.s_id = s.s_id left join course c on se.c_id = c.id left join department d on s.dept_id = d.id ORDER BY s.name; ‘‘‘ # cursor.execute(union) # find =cursor.fetchall()
階段三、python操作redis
1、模塊安裝
pip install redis
2、基本操作
# 創建連接 re = redis.Redis(host=‘127.0.0.1‘, port=‘55555‘) ## 測試 re.set(‘num‘,15) print(re.get(‘num‘)) ? ## set 中文 re.set(‘name‘,‘張三‘) print(re.get(‘name‘).decode(‘utf8‘) ) ? ### 大部分的命令 和 redis 中操作一樣 不同: re.expire(‘user_name‘, 20) # 添加過期時間 re.ttl(‘user_name‘) ### 不能看 負數 -1 -2 re.mset(a=1, b=2) ## 用鍵值對 mget a b re.incr(‘read_count‘) ## incr 可以加參數,代替了 incrby get read_count re.decr() ## decr 可以加參數,代替了 decrby ? lrange list_1 0 -1 lpush list_1 2 3 4 5 3 re.lrem(‘list_1‘, 3, 0) ## num 放到後面 re.hmset() # 多插入,用字典 re.hmset(‘users‘, {‘name‘: ‘shiwei‘, ‘age‘: 18})
06 python操作MySQL和redis(進階)