1. 程式人生 > 實用技巧 >使用PyMySQL操作MySQL資料庫

使用PyMySQL操作MySQL資料庫

安裝

pip3 install PyMySQL或者python3 -m pip install PyMySQL

連線MySQL資料庫

注意:連線之前先確保你已經安裝MySQL資料庫

MYSQL_CONFIG = {
    'host': 'localhost',  # IP地址
    'port': 3306,  # 埠
    'user': 'root',  # 使用者名稱
    'passwd': '123456',  # 密碼
    'db': 'myclass',  # 資料庫
    'charset': 'utf8',  # 編碼
}

conn = pymysql.connect(**MYSQL_CONFIG)  # 資料庫連線
cur = conn.cursor()  # 遊標物件

MYSQL_CONFIG中的指標為連線資料庫的重要引數,引數的相關說明請看以上註釋,相關引數的值請換成你自己的。

本人習慣將引數以字典的方式儲存,並在連線時用兩個*號來對字典進行解包(有興趣的小夥伴可以自行搜尋python容器解包的相關知識),這樣做的好處就是可以抽取關鍵資料,並將資料放在可配置化指令碼中。

當然,你也可以用關鍵字引數的形式把資料寫到connect()方法中,如pymysql.connect(host = 'localhost', port = 3306, ...)

建立連線後我們可以得到一個資料庫連線物件conn和遊標物件cur

執行SQL查詢語句

成功連線資料庫後,我們就可以執行相關的SQL語句來增刪改查我們的資料了。

myclass資料庫中存在student表,我們執行SQL語句來查詢student表中的資料
資料表如下

name age height
Mary 18 155.0
Tony 20 175.0
Lisa 19 165.5

執行SQL語句需要用到cur物件中的execute()方法

執行後獲取資料的方法主要有以下三種:
· fetchone(): 獲取下一個查詢結果集,結果集是一個物件,第一次執行取SQL結果集的第一條資料
· fetchmany(n): 獲取前n條資料的結果集
· fetchall(): 獲取全部的資料結果集

fetchone
sql = "SELECT * FROM student"
n = cur.execute(sql) # 執行後得到資料的條數
for i in range(n):
    print(f'--這是第{i + 1}條資料--')
    info = cur.fetchone()
    print(info)

執行結果如下

--這是第1條資料--
('Mary', 18, 155.0)
--這是第2條資料--
('Tony', 20, 175.0)
--這是第3條資料--
('Lisa', 19, 165.5)

n值是執行查詢語句返回的結果條數,fetchone()第一次執行取的是第一條資料,之後執行就是取下一條資料,遍歷n就可以取到每一條資料。

fetchmany
sql = "SELECT * FROM student"
n = cur.execute(sql) # 執行後得到資料的條數
info = cur.fetchmany(2)  # 取前面兩條資料
print(info)

執行結果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0))

fetchmany()可以取執行結果集的任意條資料,如果取n則返回全部資料的資料集。

fetchall
sql = "SELECT * FROM student"
n = cur.execute(sql) # 執行後得到資料的條數
info = cur.fetchall() # 取所有資料
print(info)

執行結果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5))

fetchall()就是取執行結果的所有資料的資料集

執行SQL插入語句

上面已經對PyMySQL中SQL的查詢方式進行了簡單的說明和實現,至於其他的增、刪、改操作其實跟上面的查詢操作差不多,主要還是使用到cur物件的execute()方法來執行。

但是執行增、刪、改操作時需要注意的是,在使用execute()方法執行SQL語句後,還要在後面加一句conn.commit(),用於將事務提交到資料庫執行。

如下

sql = "INSERT INTO student VALUES ('Ben', 19, 166.5)"
cur.execute(sql)  # 執行
conn.commit()  # 提交

執行成功後,可以通過查詢方法fatchall檢視結果,結果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5), ('Ben', 19, 166.5))

可以看到最後面多了一條新的資料,說明資料插入成功。

刪和改的操作跟插入是一樣的,在這裡就不做過多演示了,有興趣的小夥伴可以自己嘗試去實現。
務必記得要加上commit()語句哦,否則執行後不會發生任何變化。

關閉資料庫

在執行完增、刪、改、查操作後,最後一定記得要關閉遊標和資料庫連線,以避免資料庫資源的消耗和產生不同連線之間的衝突。

關閉語句如下

cur.close()  # 關閉遊標
conn.close()  # 關閉資料庫連線