使用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() # 關閉資料庫連線