学习笔记(十九)——Python与数据库交互(mysql、redis)
mysql事務(wù)
關(guān)系型數(shù)據(jù)庫(kù)的特性
①原子性:一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài),就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣。
② 一致性:是指在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性約束沒(méi)有被破壞。這是說(shuō)數(shù)據(jù)庫(kù)事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。
③隔離性:數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫(xiě)和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。
④持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。
事務(wù)操作
start transaction; 開(kāi)啟事務(wù)commit; 提交事務(wù)rollback; 回滾,撤銷全部(注意:要在Ubuntu上才能操作)
事務(wù)有什么作用?我舉個(gè)例子吧,當(dāng)你打開(kāi)兩個(gè)終端都進(jìn)入一個(gè)mysql數(shù)據(jù)庫(kù)中,當(dāng)?shù)谝粋€(gè)終端(記為Q)進(jìn)行數(shù)據(jù)插入操作,我們可以在另一個(gè)終端(記為P)把這個(gè)數(shù)據(jù)讀取出來(lái)。但當(dāng)Q開(kāi)啟事務(wù)后,P就不能讀到數(shù)據(jù),只有Q提交事務(wù)后,P方能讀取到數(shù)據(jù)。而回滾有點(diǎn)類似于撤銷,當(dāng)Q開(kāi)啟事務(wù)后數(shù)據(jù)操作有誤時(shí)可以在為提交事務(wù)前使用回滾把所有的操作全部刪除。
python連接mysql
在操作之前先開(kāi)啟mysql服務(wù)
service mysql start下面是開(kāi)啟成功的標(biāo)志
接下來(lái)就是python連接mysql了:
#連接--------------------------------------------------import pymysql #導(dǎo)入mysql包# 1、dbcomfig(ip 端口 用戶名 密碼 數(shù)據(jù)庫(kù) 數(shù)據(jù)表 ) db_config = {'host':'127.0.0.1', #ip為127.0.0.1'port':3306, #端口3306'user':'root', #這里是你登錄mysql的用戶名'password':'qwe123', #這是登錄mysql的密碼'db':'python3', #你的數(shù)據(jù)庫(kù)'charset':'utf8', #編碼utf8 }# 2、建立連接 conn = pymysql.connect(**db_config)# 3、定義游標(biāo) cur = conn.cursor()#操作--------------------------------------------------# 4、接下來(lái)就是執(zhí)行操作了 (具體操作看自己代碼怎么寫(xiě),我這里也只寫(xiě)了一部分操作) try:sql = 'SELECT * FROM students'rv = cur.execute(sql) # 執(zhí)行sql語(yǔ)句print(cur.fetchone()) # 顯示一條數(shù)據(jù)和 next() 有點(diǎn)像print(cur.fetchmany(2)) # 拿2條數(shù)據(jù) 注意現(xiàn)在從第二條開(kāi)始取,第一條已經(jīng)取走了resp = cur.fetchall() # 取得所有的數(shù)據(jù) # print(resp) # 顯示所有的 except Exception as e:print(e)conn.rollback() # 報(bào)錯(cuò)才回滾 finally:conn.commit() # 事務(wù)提交cur.close() # 關(guān)閉游標(biāo)。conn.close() # 關(guān)閉連接 connection 獲取數(shù)據(jù): fetchone() 取得一條數(shù)據(jù) fetchall() 取得所有的數(shù)據(jù) fetchmany(n) 取得n條數(shù)據(jù) 執(zhí)行: execute(···) 執(zhí)行語(yǔ)句python連接redis
#連接--------------------------------------------------import redis# decode_responses = True 讓redis返回的數(shù)據(jù)是str類型,如果不指定則結(jié)果為bytes. ‘中文’ con = redis.StrictRedis(host='127.0.0.1',port='6379',decode_responses=True ) print(con)#操作--------------------------------------------------# ---------------------string----------------- # 增 con.set('country', '中國(guó)') con.mset({'name': '張三', 'city': '福建'}) #查 a = con.get('country') print(a) b = con.mget('name', 'city') print(b) #刪 con.delete('country') a = con.get('country') print(a)#-------------------- hash-------------------- #增 con.hmset('user', {'name': '李四', 'city': '廈門(mén)', 'age': 18, 'sex': '女'}) #改 con.hset('user', 'age', 20) #刪 con.hdel('user', 'age') #查 a = con.hgetall('user') print(a) a = con.hexists('user', 'age') print(a)# -------------------list---------------------- #增 con.rpush('list1', '中國(guó)', '日本', '韓國(guó)', '印度', '新加坡', '馬拉西亞') #改 con.lset('list1', 2, '美國(guó)') #第二個(gè)元素修改為美國(guó) #刪 con.lpop('list1') # 刪除尾部一個(gè)數(shù)據(jù) #查 a = con.lrange('list1', 0, -1) print(a)# ---------------------set----------------------- #增 con.sadd('set1', '華大', '廈大', '福大', '福師大', '集大') #刪 con.srem('set1', '華大') #查改 a = con.smembers('set1') print(a)# ----------------------zset----------------------- #增 con.zadd('zset1', 1, '韓信', 2, '小喬', 3, '妲己', 4, '蔡文姬') #刪 con.zrem('zset13', '韓信') #查 a = con.zrange('zset1', 0, -1) print(a)# 全局命令 con.rename('zset1', 'zset2') print(con.keys())con.expire('set2', 30) #設(shè)置過(guò)期時(shí)間import time time.sleep(5) #等待5秒 print(con.ttl('zset2')) #查看過(guò)期時(shí)間 print(con.persist('zset2')) # 撤銷過(guò)期時(shí)間這里的操作我只是列舉了一小部分,有興趣的可以自己去嘗試其他操作。
總結(jié)
以上是生活随笔為你收集整理的学习笔记(十九)——Python与数据库交互(mysql、redis)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QT设计器主界面中文介绍
- 下一篇: 二、八、十、十六进制及小数间的转换