学习笔记(十九)——Python与数据库交互(mysql、redis)
mysql事務
關系型數據庫的特性
①原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
② 一致性:是指在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。這是說數據庫事務不能破壞關系數據的完整性以及業務邏輯上的一致性。
③隔離性:數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。
④持久性:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。
事務操作
start transaction; 開啟事務commit; 提交事務rollback; 回滾,撤銷全部(注意:要在Ubuntu上才能操作)
事務有什么作用?我舉個例子吧,當你打開兩個終端都進入一個mysql數據庫中,當第一個終端(記為Q)進行數據插入操作,我們可以在另一個終端(記為P)把這個數據讀取出來。但當Q開啟事務后,P就不能讀到數據,只有Q提交事務后,P方能讀取到數據。而回滾有點類似于撤銷,當Q開啟事務后數據操作有誤時可以在為提交事務前使用回滾把所有的操作全部刪除。
python連接mysql
在操作之前先開啟mysql服務
service mysql start下面是開啟成功的標志
接下來就是python連接mysql了:
#連接--------------------------------------------------import pymysql #導入mysql包# 1、dbcomfig(ip 端口 用戶名 密碼 數據庫 數據表 ) db_config = {'host':'127.0.0.1', #ip為127.0.0.1'port':3306, #端口3306'user':'root', #這里是你登錄mysql的用戶名'password':'qwe123', #這是登錄mysql的密碼'db':'python3', #你的數據庫'charset':'utf8', #編碼utf8 }# 2、建立連接 conn = pymysql.connect(**db_config)# 3、定義游標 cur = conn.cursor()#操作--------------------------------------------------# 4、接下來就是執行操作了 (具體操作看自己代碼怎么寫,我這里也只寫了一部分操作) try:sql = 'SELECT * FROM students'rv = cur.execute(sql) # 執行sql語句print(cur.fetchone()) # 顯示一條數據和 next() 有點像print(cur.fetchmany(2)) # 拿2條數據 注意現在從第二條開始取,第一條已經取走了resp = cur.fetchall() # 取得所有的數據 # print(resp) # 顯示所有的 except Exception as e:print(e)conn.rollback() # 報錯才回滾 finally:conn.commit() # 事務提交cur.close() # 關閉游標。conn.close() # 關閉連接 connection 獲取數據: fetchone() 取得一條數據 fetchall() 取得所有的數據 fetchmany(n) 取得n條數據 執行: execute(···) 執行語句python連接redis
#連接--------------------------------------------------import redis# decode_responses = True 讓redis返回的數據是str類型,如果不指定則結果為bytes. ‘中文’ con = redis.StrictRedis(host='127.0.0.1',port='6379',decode_responses=True ) print(con)#操作--------------------------------------------------# ---------------------string----------------- # 增 con.set('country', '中國') 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': '廈門', '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', '中國', '日本', '韓國', '印度', '新加坡', '馬拉西亞') #改 con.lset('list1', 2, '美國') #第二個元素修改為美國 #刪 con.lpop('list1') # 刪除尾部一個數據 #查 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) #設置過期時間import time time.sleep(5) #等待5秒 print(con.ttl('zset2')) #查看過期時間 print(con.persist('zset2')) # 撤銷過期時間這里的操作我只是列舉了一小部分,有興趣的可以自己去嘗試其他操作。
總結
以上是生活随笔為你收集整理的学习笔记(十九)——Python与数据库交互(mysql、redis)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT设计器主界面中文介绍
- 下一篇: 爬虫学习笔记(十三)—— scrapy-