Python3操作MySQL資料庫
阿新 • • 發佈:2022-05-12
使用Python3操作MySQL資料庫我們需要安裝三方庫PyMySQL,安裝方式如下:
$ pip install pymysql
資料庫操作步驟為:
- 建立資料庫連線:conn = pymysql.connect()
- 從連線建立操作遊標:cur = conn.cursor()
- 使用遊標執行sql(讀/寫):cur.execute(sql)
- 獲取結果(讀)/ 提交更改(寫): cur.fetchall()/conn.commit()
- 關閉遊標及連線:cur.close();conn.close()
遊標是指向資料緩衝區的一個變數,可以逐條的訪問資料庫執行結果集。PyMySQL中需要通過遊標來執行sql和獲取結果。
基本使用
import pymysql # 1. 建立連線 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', # password也可以 db='api_test', charset='utf8') # 如果查詢有中文需要指定資料庫編碼 # 2. 從連線建立遊標(有了遊標才能操作資料庫) cur = conn.cursor() # 3. 查詢資料庫(讀) cur.execute("select * from user where name='張三'") # 4. 獲取查詢結果 result = cur.fetchall() print(result) # 3. 更改資料庫(寫) cur.execute("delete from user where name='李四'") # 4. 提交更改 conn.commit() # 注意是用的conn不是cur # 5. 關閉遊標及連線 cur.close() conn.close()
資料庫查詢操作
使用cur.execute(), 執行資料庫查詢後無返回的是影響的行數,而非查詢結果。我們要使用cur.fetchone()/cur.fetchmany()/cur.fetchall()來獲取查詢結果
- cur.fetchone():獲取一條資料(同時獲取的資料會從結果集刪除),返回元祖
- cur.fetchmany(3):獲取多條資料,返回巢狀元祖(('張三','123456'),('李四','123456'),("王五","123456"))
- cur.fetchall():獲取所有資料,返回巢狀元祖,(('張三','123456'),)
注: 獲取完資料後,資料會從資料集中刪除,再次獲取獲取不到,如:
cur.execute(select * from user where name='張三')
print(cur.fetchone()) # 取走一個結果 得到: ('張三','123456')
print(cur.fetchone()) # 結果:None 因為上一步已經把結果取玩了
print(cur.fetchall()) # 結果:()
所以我們需要重複使用查詢結果時,需要將查詢結果賦給某個變數
cur.execute(select * from user where name='張三')
result = cur.fetchall()
print(result) # 結果: ('張三','123456')
print(result) # 結果: ('張三','123456')
注:如果想要獲取欄位名和值組合的字典形式的結果,可以使用字典遊標
cur = conn.cursor(pymysql.cursors.DictCurser)
,這樣
cur.fetchone()獲取到的是字典形式的結果,cur.fetchmany()和cur.fetchall()獲取到的是列表巢狀字典。
資料修改操作
執行修改資料庫的操作後不立即生效,使用連線conn.commit()提交後才生效,支援事物及回滾
try:
cur.execute("insert into user (name,password) values ('張三', '123456')")
cur.execute("insert into user (name, passwd) values ('李四'), '123456'") # 此處sql出錯
conn.commit() # 使用連線提交所有更改
except Exception as e:
conn.rollback() # 回滾所有更改(注意用的是conn)
print(str(e))