欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python操作MySQL的詳細(xì)教程

 更新時(shí)間:2024年10月09日 11:43:59   作者:易辰君  
PyMySQL 是一個(gè)純 Python 的庫(kù),用于連接 MySQL 數(shù)據(jù)庫(kù),并執(zhí)行 SQL 語(yǔ)句,該庫(kù)的主要用途是通過(guò) Python 代碼與 MySQL 數(shù)據(jù)庫(kù)進(jìn)行交互,比如執(zhí)行查詢、插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)等操作,本文介紹了python操作MySQL的詳細(xì)教程,需要的朋友可以參考下

前言

PyMySQL 是一個(gè)純 Python 的庫(kù),用于連接 MySQL 數(shù)據(jù)庫(kù),并執(zhí)行 SQL 語(yǔ)句。它是 MySQLdb 的替代品,但不同于后者,PyMySQL 不需要 C 語(yǔ)言的依賴,因此更加輕量且易于安裝和使用。該庫(kù)的主要用途是通過(guò) Python 代碼與 MySQL 數(shù)據(jù)庫(kù)進(jìn)行交互,比如執(zhí)行查詢、插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)等操作。

一、PyMySQL的特點(diǎn)

該庫(kù)的特點(diǎn)主要有以下三點(diǎn):

  • 純 Python 實(shí)現(xiàn):不需要依賴 C 擴(kuò)展庫(kù),可以輕松在各類系統(tǒng)上使用,如 Windows、Linux、macOS 等。

  • 兼容性強(qiáng):支持 MySQL 5.x 和 MySQL 8.x 版本,也兼容 MariaDB。

  • 易用性:提供了與 MySQLdb 類似的 API,便于用戶從 MySQLdb 遷移過(guò)來(lái)。

二、安裝

PyMySQL 可以通過(guò) pip 輕松安裝:

pip install pymysql

三、基本用法

(一)連接MySQL數(shù)據(jù)庫(kù)

在使用 PyMySQL 之前,你需要先連接到 MySQL 數(shù)據(jù)庫(kù)。連接數(shù)據(jù)庫(kù)時(shí),通常需要提供數(shù)據(jù)庫(kù)的主機(jī)地址、用戶名、密碼、數(shù)據(jù)庫(kù)名等信息。

示例:

import pymysql
 
# 創(chuàng)建連接
connection = pymysql.connect(
    host='localhost',      # 數(shù)據(jù)庫(kù)主機(jī)地址
    user='your_username',  # 數(shù)據(jù)庫(kù)用戶名
    password='your_password', # 數(shù)據(jù)庫(kù)密碼
    database='your_dbname',   # 選擇的數(shù)據(jù)庫(kù)
    charset='utf8mb4',     # 指定字符集
    cursorclass=pymysql.cursors.DictCursor  # 返回字典格式的數(shù)據(jù)
)
 
# 創(chuàng)建游標(biāo)
cursor = connection.cursor()
 
# 關(guān)閉游標(biāo)和連接
cursor.close()
connection.close()

(二)數(shù)據(jù)查詢

使用游標(biāo)對(duì)象來(lái)執(zhí)行 SQL 查詢并獲取數(shù)據(jù)。

示例:

try:
    # 創(chuàng)建游標(biāo)
    with connection.cursor() as cursor:
        # SQL 查詢
        sql = "SELECT * FROM users WHERE age > %s"
        cursor.execute(sql, (25,))  # 使用參數(shù)化查詢防止 SQL 注入
        # 獲取結(jié)果
        results = cursor.fetchall()  # 返回所有結(jié)果
        for row in results:
            print(row)
finally:
    # 關(guān)閉連接
    connection.close()

(三)插入數(shù)據(jù)

執(zhí)行插入操作時(shí),可以使用 execute() 或 executemany() 方法。

示例:

try:
    with connection.cursor() as cursor:
        # SQL 插入語(yǔ)句
        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ù)都是通過(guò) SQL 語(yǔ)句和 execute() 函數(shù)來(lái)完成。

  • 更新數(shù)據(jù)

示例:

try:
    with connection.cursor() as cursor:
        # SQL 更新語(yǔ)句
        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 刪除語(yǔ)句
        sql = "DELETE FROM users WHERE name = %s"
        cursor.execute(sql, ('John Doe',))
    
    # 提交更改
    connection.commit()
finally:
    connection.close()

(五)事務(wù)管理

MySQL 數(shù)據(jù)庫(kù)支持事務(wù),PyMySQL 默認(rèn)啟用了自動(dòng)提交。如果你需要手動(dòng)控制事務(wù),可以關(guān)閉自動(dòng)提交并在合適的時(shí)機(jī)提交或回滾。

示例:

try:
    # 關(guān)閉自動(dòng)提交
    connection.autocommit(False)
 
    with connection.cursor() as cursor:
        # SQL 插入語(yǔ)句
        sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
        cursor.execute(sql, ('Chris', 27, 'chris@example.com'))
 
        # 人為錯(cuò)誤,測(cè)試回滾
        raise Exception("人為觸發(fā)異常")
 
    # 提交事務(wù)
    connection.commit()
except Exception as e:
    print(f"出現(xiàn)錯(cuò)誤: {e}")
    # 回滾事務(wù)
    connection.rollback()
finally:
    connection.close()

四、游標(biāo)類型

PyMySQL 提供了多種游標(biāo)類型,適用于不同的場(chǎng)景:

  • 默認(rèn)游標(biāo):返回元組格式的結(jié)果。

  • 字典游標(biāo) (DictCursor):返回字典格式的結(jié)果,字段名作為鍵。

  • SSCursor:流式游標(biāo),用于處理大數(shù)據(jù)量時(shí),避免一次性加載大量數(shù)據(jù)到內(nèi)存。

使用不同游標(biāo)類型可以通過(guò) cursorclass 參數(shù)指定。例如:

# 字典游標(biāo)
connection = pymysql.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_dbname',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor  # 使用字典游標(biāo)
)

五、安全性

為了防止 SQL 注入攻擊,務(wù)必使用參數(shù)化查詢,而不是將參數(shù)直接拼接到 SQL 字符串中。

示例:

# 不安全的寫法
sql = f"SELECT * FROM users WHERE name = '{name}'"  # 容易導(dǎo)致 SQL 注入
 
# 安全的寫法
sql = "SELECT * FROM users WHERE name = %s"
cursor.execute(sql, (name,))

六、常見(jiàn)錯(cuò)誤處理

PyMySQL 中常見(jiàn)的錯(cuò)誤處理可以通過(guò)捕獲異常來(lái)完成:

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ù)庫(kù)連接失敗: {e}")

七、性能優(yōu)化

  • 使用批量操作:如插入數(shù)據(jù)時(shí),使用 executemany() 批量插入,減少數(shù)據(jù)庫(kù)的交互次數(shù)。

  • 連接池:在大規(guī)模應(yīng)用中,可以通過(guò)第三方庫(kù)如 DBUtils 或 SQLAlchemy 提供的連接池來(lái)優(yōu)化數(shù)據(jù)庫(kù)連接的復(fù)用性。

  • 流式查詢:對(duì)于大規(guī)模查詢,使用 SSCursor 流式游標(biāo),避免一次性加載所有數(shù)據(jù)到內(nèi)存。

八、總結(jié)

PyMySQL 是一個(gè)輕量級(jí)、易于使用的 Python 庫(kù),適合 Python 程序員與 MySQL 數(shù)據(jù)庫(kù)進(jìn)行交互。通過(guò)它,你可以高效地執(zhí)行 SQL 查詢、插入、更新和刪除數(shù)據(jù)操作,同時(shí)還可以利用其事務(wù)支持、游標(biāo)控制等高級(jí)功能。

以上就是python操作MySQL的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于python操作MySQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python smtplib實(shí)現(xiàn)發(fā)送郵件功能

    Python smtplib實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了Python smtplib實(shí)現(xiàn)發(fā)送郵件功能,包含文本、附件、圖片等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python的條件控制?if?語(yǔ)句詳解

    Python的條件控制?if?語(yǔ)句詳解

    Python的?if?語(yǔ)句用來(lái)「控制代碼」的執(zhí)行,「判斷條件成立」時(shí)執(zhí)行一段代碼,判斷條件「不成立」時(shí)執(zhí)行另一段代碼,本文就給大家詳細(xì)講講Python的條件控制?if?語(yǔ)句,需要的朋友可以參考下
    2023-08-08
  • django框架自定義模板標(biāo)簽(template tag)操作示例

    django框架自定義模板標(biāo)簽(template tag)操作示例

    這篇文章主要介紹了django框架自定義模板標(biāo)簽(template tag)操作,結(jié)合實(shí)例形式分析了Django框架自定義模板標(biāo)簽原理、操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • 淺談django中的認(rèn)證與登錄

    淺談django中的認(rèn)證與登錄

    下面小編就為大家?guī)?lái)一篇淺談django中的認(rèn)證與登錄。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • python:pandas合并csv文件的方法(圖書數(shù)據(jù)集成)

    python:pandas合并csv文件的方法(圖書數(shù)據(jù)集成)

    下面小編就為大家分享一篇python:pandas合并csv文件的方法(圖書數(shù)據(jù)集成),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python項(xiàng)目打包成exe和安裝包的方法步驟

    python項(xiàng)目打包成exe和安裝包的方法步驟

    本文主要介紹了python項(xiàng)目打包成exe和安裝包的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python是怎么被發(fā)明的

    python是怎么被發(fā)明的

    在本篇文章里小編給大家分享的是關(guān)于python的由來(lái)等相關(guān)內(nèi)容,有興趣的朋友們學(xué)習(xí)參考下。
    2020-06-06
  • 玩轉(zhuǎn)python爬蟲(chóng)之cookie使用方法

    玩轉(zhuǎn)python爬蟲(chóng)之cookie使用方法

    Cookie用于服務(wù)器實(shí)現(xiàn)會(huì)話,用戶登錄及相關(guān)功能時(shí)進(jìn)行狀態(tài)管理,這篇文章主要介紹了使用python處理cookie的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python實(shí)現(xiàn)破解12306圖片驗(yàn)證碼的方法分析

    Python實(shí)現(xiàn)破解12306圖片驗(yàn)證碼的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)破解12306圖片驗(yàn)證碼的方法,涉及Python圖片截取、調(diào)用百度識(shí)圖及正則截取等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • python網(wǎng)絡(luò)爬蟲(chóng) CrawlSpider使用詳解

    python網(wǎng)絡(luò)爬蟲(chóng) CrawlSpider使用詳解

    這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲(chóng) CrawlSpider使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論