摘要:的安裝博客補充知識年最新安裝教程,滾雪球?qū)W第四季。操作操作數(shù)據(jù)庫一般被程序員成為操作增刪改查,其中各個字符分別代表新增,讀取,更新,刪除??梢苑祷厥苡绊懶袛?shù),可以直接通過該值判斷是否修改成功。
在第一季滾雪球?qū)W python 中,我們已經(jīng)接觸了 python 操作 sqlite,本篇博客為你介紹 python 與 mysql 和 nosql 之間的故事。
在正式學(xué)習(xí)之前,先確保你電腦上已經(jīng)安裝了 mysql 。
mysql 的安裝博客:補充知識:2021 年 mysql 最新 windows 安裝教程,滾雪球?qū)W python 第四季。
對于 mysql 的細(xì)致學(xué)習(xí),咱們應(yīng)該多帶帶開一個系列,這個 flag 先立下了,本文為了學(xué)習(xí) python 操作 mysql 數(shù)據(jù)庫,只能先做一些基本鋪墊。
查看所有數(shù)據(jù)庫
show databases;
查看幫助
help
退出 mysql
exit
創(chuàng)建數(shù)據(jù)庫
create database cadb;
刪除數(shù)據(jù)庫
drop database cadb;
使用某個數(shù)據(jù)庫
use cadb;
查看庫表
show tables;
查看表結(jié)構(gòu)
desc 表名;
除了上述內(nèi)容外,你還要學(xué)習(xí)建表語句,刪表語句,表中插入數(shù)據(jù)語句,表刪除數(shù)據(jù)語句,表更新數(shù)據(jù)語句,這些稍后在 python 操作 mysql 中進(jìn)行實現(xiàn)。
操作數(shù)據(jù)庫一般被程序員成為 CRUD 操作(增刪改查),其中各個字符分別代表 C(Create)
新增,R(Read)
讀取,U(Update)
更新,D(Delete)
刪除。
在 python3 中推薦使用 pymysql
模塊操作數(shù)據(jù)庫,模塊使用命令 pip install PyMySQL
進(jìn)行安裝。
在此之前,先通過 MySQL Command Line Client
創(chuàng)建一個表用來做測試。
新建庫,新建表,插入數(shù)據(jù) 命令依次如下
show databases;create database cadb;use cadb;-- 建表語句create table user(name varchar(10),uid int,primary key(uid));desc user;
接下來在表中插入 2 條數(shù)據(jù)。
insert into user(name,uid) values ("橡皮擦",1);insert into user(name,uid) values ("CSDN",2);
簡單的查詢 sql 如下所示:
select * from user;
下面就可以在 python 中編寫操作該庫表的相關(guān)代碼了,數(shù)據(jù)庫鏈接步驟如下:
python 查詢數(shù)據(jù)
python 連接數(shù)據(jù)庫獲取數(shù)據(jù)
import pymysql# python 連接數(shù)據(jù)庫,返回數(shù)據(jù)庫連接對象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")print(conn)
輸出連接對象如下所示:
<pymysql.connections.Connection object at 0x00000000021E2F60>
其中 connect
方法相關(guān)的參數(shù)可以依據(jù)名稱進(jìn)行判斷。
接下來就是創(chuàng)建游標(biāo),提取數(shù)據(jù)。
# 通過 cursor() 創(chuàng)建游標(biāo)對象,并讓查詢結(jié)果以字典格式輸出cur = conn.cursor(cursor=pymysql.cursors.DictCursor)# 輸出
下一步使用游標(biāo)對象 cur
的 execute
方法執(zhí)行 sql
。
cur.execute("select * from user")
最后通過相關(guān)方法獲取查詢結(jié)果,本案例獲取所有用戶使用 fetchall
方法。
# 獲取查詢結(jié)果data = cur.fetchall()
輸入數(shù)據(jù)庫檢索的所有數(shù)據(jù)。
[{"name": "橡皮擦", "uid": 1}, {"name": "CSDN", "uid": 2}]
關(guān)閉游標(biāo),關(guān)閉連接
# 關(guān)閉游標(biāo)cur.close()# 關(guān)閉數(shù)據(jù)庫連接conn.close()
接下來我們將其修改的復(fù)雜一些,檢索特定數(shù)據(jù),例如 uid=1
的數(shù)據(jù),并且用到上下文管理器 with 進(jìn)行對象的關(guān)閉。
第一種寫法
import pymysql# python 連接數(shù)據(jù)庫,返回數(shù)據(jù)庫連接對象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur: cur.execute("select * from user where uid = %s", 1) # 獲取查詢結(jié)果 data = cur.fetchall() print(data)# 關(guān)閉數(shù)據(jù)庫連接conn.close()
第二種寫法
import pymysql# python 連接數(shù)據(jù)庫,返回數(shù)據(jù)庫連接對象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur: cur.execute("select * from user where uid = %(uid)s", {"uid": 1}) # 獲取查詢結(jié)果 data = cur.fetchall() print(data)# 關(guān)閉數(shù)據(jù)庫連接conn.close()
兩種寫法,在 execute
方法參數(shù)存在差異,可直接對比學(xué)習(xí)。
python 更新數(shù)據(jù)表數(shù)據(jù)
接下來演示的是使用 python 去更新表數(shù)據(jù),例如將 uid = 2
的 name
列更新為 Code
。
import pymysql# python 連接數(shù)據(jù)庫,返回數(shù)據(jù)庫連接對象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur: try: cur.execute("update user set name =%s where uid = %s", ["Code", 2]) conn.commit() # 提交事務(wù) except Exception as e: print("數(shù)據(jù)更新異常", e) conn.rollback() # 數(shù)據(jù)回滾# 關(guān)閉數(shù)據(jù)庫連接conn.close()
上述代碼核心為在執(zhí)行 SQL 操作之后,需要使用事務(wù)處理,即 conn.commit
提交事務(wù),確保當(dāng)前修改生效,如果出現(xiàn)異常,還需要使用 conn.rollback
對提交事務(wù)進(jìn)行回滾。
cursor. execute
可以返回受影響行數(shù),可以直接通過該值判斷是否修改成功。
本次代碼還使用了 try-except
語句,對于 PyMySQL 模塊內(nèi)置的異常類,清單如下:
python 新增數(shù)據(jù)表數(shù)據(jù)
接下來演示增加數(shù)據(jù),本次插入數(shù)據(jù)都采用硬編碼,如果想創(chuàng)建一個自動遞增的表字段,需要繼續(xù)研究 sql 相關(guān)寫法。
import pymysql# python 連接數(shù)據(jù)庫,返回數(shù)據(jù)庫連接對象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur: try: affected = cur.execute("insert into user(name,uid) values (%s,%s)", ["Good", 3]) conn.commit() # 提交事務(wù) print("受影響行數(shù)", affected) except Exception as e: print("數(shù)據(jù)插入異常", e) conn.rollback() # 數(shù)據(jù)回滾# 關(guān)閉數(shù)據(jù)庫連接conn.close()
python 刪除表格數(shù)據(jù)
核心代碼如下所示:
affected = cur.execute("delete from user where uid = %s", [3])conn.commit() # 提交事務(wù)print("受影響行數(shù)", affected)
寫到這里,你可以自行完成一個 python 簡單的數(shù)據(jù)庫操作封裝。
mysql 數(shù)據(jù)關(guān)系型數(shù)據(jù)庫,與之對應(yīng)的就是非關(guān)系型數(shù)據(jù)庫,例如 python 內(nèi)置的 dbm(database manager )
第一個要學(xué)習(xí)的方法是 dbm.open
,方法原型如下所示:
def open(file, flag="r", mode=0o666):
flag 參數(shù):
r
: 只讀;w
: 只寫;n
: 總是創(chuàng)建一個數(shù)據(jù)庫,打開方式為讀寫;c
: 存在不創(chuàng)建,不存在則創(chuàng)建。關(guān)閉數(shù)據(jù)庫使用 dbm.close()
,使用 with
語句之后,不需要手動釋放資源。
with dbm.open(xxx) as db: pass
dbm 存儲的形式類似 python 字典,以鍵值對形式存在。
import dbmwith dbm.open("example.db", "n") as db: db["name"] = "橡皮擦" # 存儲值 db["age"] = "18" # values must be bytes or strings
讀取值使用 db[key]
即可,如果沒有 key
值,提示 KeyError
錯誤。
import dbmwith dbm.open("example.db", "r") as db: ca = db["name"] age = db["age"] print(ca)
dbm
數(shù)據(jù)庫保存的數(shù)據(jù)是字符串類型或者字節(jié)序列類型,讀取到的值是字節(jié)序列類型,需要使用解碼函數(shù) decode
轉(zhuǎn)換成字符串。
以上內(nèi)容就是本文的全部內(nèi)容,希望對學(xué)習(xí)路上的你有所幫助~
今天是持續(xù)寫作的第 230 / 365 天。
期待 關(guān)注,點贊、評論、收藏。
更多精彩
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/121550.html
摘要:在流程控制中,你將同步學(xué)到關(guān)系運算符與邏輯運算符。關(guān)系運算符在中關(guān)系運算符其實就是比大小的概念,所以要學(xué)習(xí)的就是大于小于等于等內(nèi)容。邏輯運算符邏輯運算符在中有個,分別是。含有邏輯運算符的式子,最終返回的結(jié)果也是布爾值。 滾雪球?qū)W Python,目標(biāo)就是讓 Python 學(xué)起來之后,越滾越大。三、無轉(zhuǎn)折不編程如果...
摘要:圖片下載屬于操作,比較耗時,基于此,可以利用中的多線程將其實現(xiàn)。更多精彩滾雪球?qū)W完結(jié)滾雪球?qū)W第二輪完結(jié)滾雪球?qū)W第三輪滾雪球?qū)W番外篇完結(jié) 在 python 編碼過程中...
摘要:看起來好像是廢話,它還有一個補充的說明,在函數(shù)式編程中要避免狀態(tài)變化和使用可變對象。函數(shù)式編程的特點在中,函數(shù)即對象,例如聲明一個函數(shù)之后,你可以調(diào)用其屬性。 ...
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
閱讀 2004·2021-11-25 09:43
閱讀 2206·2021-11-19 09:40
閱讀 3494·2021-11-18 13:12
閱讀 1813·2021-09-29 09:35
閱讀 742·2021-08-24 10:00
閱讀 2598·2019-08-30 15:55
閱讀 1781·2019-08-30 12:56
閱讀 1885·2019-08-28 17:59