python操作MySQL的詳細教程
前言
PyMySQL 是一個純 Python 的庫,用于連接 MySQL 數(shù)據(jù)庫,并執(zhí)行 SQL 語句。它是 MySQLdb 的替代品,但不同于后者,PyMySQL 不需要 C 語言的依賴,因此更加輕量且易于安裝和使用。該庫的主要用途是通過 Python 代碼與 MySQL 數(shù)據(jù)庫進行交互,比如執(zhí)行查詢、插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)等操作。
一、PyMySQL的特點
該庫的特點主要有以下三點:
純 Python 實現(xiàn):不需要依賴 C 擴展庫,可以輕松在各類系統(tǒng)上使用,如 Windows、Linux、macOS 等。
兼容性強:支持 MySQL 5.x 和 MySQL 8.x 版本,也兼容 MariaDB。
易用性:提供了與
MySQLdb類似的 API,便于用戶從MySQLdb遷移過來。
二、安裝
PyMySQL 可以通過 pip 輕松安裝:
pip install pymysql
三、基本用法
(一)連接MySQL數(shù)據(jù)庫
在使用 PyMySQL 之前,你需要先連接到 MySQL 數(shù)據(jù)庫。連接數(shù)據(jù)庫時,通常需要提供數(shù)據(jù)庫的主機地址、用戶名、密碼、數(shù)據(jù)庫名等信息。
示例:
import pymysql
# 創(chuàng)建連接
connection = pymysql.connect(
host='localhost', # 數(shù)據(jù)庫主機地址
user='your_username', # 數(shù)據(jù)庫用戶名
password='your_password', # 數(shù)據(jù)庫密碼
database='your_dbname', # 選擇的數(shù)據(jù)庫
charset='utf8mb4', # 指定字符集
cursorclass=pymysql.cursors.DictCursor # 返回字典格式的數(shù)據(jù)
)
# 創(chuàng)建游標
cursor = connection.cursor()
# 關閉游標和連接
cursor.close()
connection.close()(二)數(shù)據(jù)查詢
使用游標對象來執(zhí)行 SQL 查詢并獲取數(shù)據(jù)。
示例:
try:
# 創(chuàng)建游標
with connection.cursor() as cursor:
# SQL 查詢
sql = "SELECT * FROM users WHERE age > %s"
cursor.execute(sql, (25,)) # 使用參數(shù)化查詢防止 SQL 注入
# 獲取結果
results = cursor.fetchall() # 返回所有結果
for row in results:
print(row)
finally:
# 關閉連接
connection.close()(三)插入數(shù)據(jù)
執(zhí)行插入操作時,可以使用 execute() 或 executemany() 方法。
示例:
try:
with connection.cursor() as cursor:
# SQL 插入語句
sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
# 執(zhí)行單條插入
cursor.execute(sql, ('John Doe', 30, 'john.doe@example.com'))
# 執(zhí)行多條插入
users = [
('Alice', 25, 'alice@example.com'),
('Bob', 28, 'bob@example.com')
]
cursor.executemany(sql, users)
# 提交更改
connection.commit()
finally:
connection.close()(四)更新和刪除數(shù)據(jù)
類似于插入數(shù)據(jù),更新和刪除數(shù)都是通過 SQL 語句和 execute() 函數(shù)來完成。
- 更新數(shù)據(jù)
示例:
try:
with connection.cursor() as cursor:
# SQL 更新語句
sql = "UPDATE users SET email = %s WHERE name = %s"
cursor.execute(sql, ('new.email@example.com', 'John Doe'))
# 提交更改
connection.commit()
finally:
connection.close()- 刪除數(shù)據(jù)
示例:
try:
with connection.cursor() as cursor:
# SQL 刪除語句
sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ('John Doe',))
# 提交更改
connection.commit()
finally:
connection.close()(五)事務管理
MySQL 數(shù)據(jù)庫支持事務,PyMySQL 默認啟用了自動提交。如果你需要手動控制事務,可以關閉自動提交并在合適的時機提交或回滾。
示例:
try:
# 關閉自動提交
connection.autocommit(False)
with connection.cursor() as cursor:
# SQL 插入語句
sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
cursor.execute(sql, ('Chris', 27, 'chris@example.com'))
# 人為錯誤,測試回滾
raise Exception("人為觸發(fā)異常")
# 提交事務
connection.commit()
except Exception as e:
print(f"出現(xiàn)錯誤: {e}")
# 回滾事務
connection.rollback()
finally:
connection.close()四、游標類型
PyMySQL 提供了多種游標類型,適用于不同的場景:
默認游標:返回元組格式的結果。
字典游標 (
DictCursor):返回字典格式的結果,字段名作為鍵。SSCursor:流式游標,用于處理大數(shù)據(jù)量時,避免一次性加載大量數(shù)據(jù)到內存。
使用不同游標類型可以通過 cursorclass 參數(shù)指定。例如:
# 字典游標
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_dbname',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor # 使用字典游標
)五、安全性
為了防止 SQL 注入攻擊,務必使用參數(shù)化查詢,而不是將參數(shù)直接拼接到 SQL 字符串中。
示例:
# 不安全的寫法
sql = f"SELECT * FROM users WHERE name = '{name}'" # 容易導致 SQL 注入
# 安全的寫法
sql = "SELECT * FROM users WHERE name = %s"
cursor.execute(sql, (name,))六、常見錯誤處理
PyMySQL 中常見的錯誤處理可以通過捕獲異常來完成:
import pymysql
try:
connection = pymysql.connect(host='localhost', user='root', password='', database='test_db')
cursor = connection.cursor()
except pymysql.MySQLError as e:
print(f"數(shù)據(jù)庫連接失敗: {e}")七、性能優(yōu)化
使用批量操作:如插入數(shù)據(jù)時,使用
executemany()批量插入,減少數(shù)據(jù)庫的交互次數(shù)。連接池:在大規(guī)模應用中,可以通過第三方庫如
DBUtils或SQLAlchemy提供的連接池來優(yōu)化數(shù)據(jù)庫連接的復用性。流式查詢:對于大規(guī)模查詢,使用
SSCursor流式游標,避免一次性加載所有數(shù)據(jù)到內存。
八、總結
PyMySQL 是一個輕量級、易于使用的 Python 庫,適合 Python 程序員與 MySQL 數(shù)據(jù)庫進行交互。通過它,你可以高效地執(zhí)行 SQL 查詢、插入、更新和刪除數(shù)據(jù)操作,同時還可以利用其事務支持、游標控制等高級功能。
以上就是python操作MySQL的詳細教程的詳細內容,更多關于python操作MySQL的資料請關注腳本之家其它相關文章!
相關文章
Python smtplib實現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細介紹了Python smtplib實現(xiàn)發(fā)送郵件功能,包含文本、附件、圖片等,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
django框架自定義模板標簽(template tag)操作示例
這篇文章主要介紹了django框架自定義模板標簽(template tag)操作,結合實例形式分析了Django框架自定義模板標簽原理、操作步驟與相關實現(xiàn)技巧,需要的朋友可以參考下2019-06-06
python:pandas合并csv文件的方法(圖書數(shù)據(jù)集成)
下面小編就為大家分享一篇python:pandas合并csv文件的方法(圖書數(shù)據(jù)集成),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實現(xiàn)破解12306圖片驗證碼的方法分析
這篇文章主要介紹了Python實現(xiàn)破解12306圖片驗證碼的方法,涉及Python圖片截取、調用百度識圖及正則截取等相關操作技巧,需要的朋友可以參考下2017-12-12
python網(wǎng)絡爬蟲 CrawlSpider使用詳解
這篇文章主要介紹了python網(wǎng)絡爬蟲 CrawlSpider使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09

