安裝
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() # 關閉數據庫連接