Python MySQL 的增刪改查 示範


註: 本次示範使用 python 3.12 和 MySql 8.3.0

安裝 Python 連接 MySQL 套件

    
pip install mysql-connector-python
    

如果已經安裝,可以使用下面的指令來更新:
    
pip install mysql-connector-python --upgrade
    

執行 SQL 語法(建立資料表)

為了方便後續示範,我們這裡先示範執行一段 SQL 語法,用途是建立 users 資料表:
    
import mysql.connector

conn = None
cursor = None

try:
    # 建立資料庫連接
    conn = mysql.connector.connect(
        host="localhost",  # 資料庫主機地址
        user="ruyut",  # 資料庫使用者名稱
        password="ruyut",  # 資料庫密碼
        database="mydb"  # 要連接的資料庫名稱
    )

    cursor = conn.cursor()

    create_users_table_sql = """
        create table if not exists users(
            id int primary key auto_increment,
            username varchar(255) not null,
            email varchar(255) not null,
            created_at timestamp default current_timestamp
        );
    """

    cursor.execute(create_users_table_sql)

except mysql.connector.Error as e:
    print(f"資料庫執行失敗:{e}")
except Exception as e:
    print(f"出現錯誤:{e}")
finally:
    # 關閉資料庫連接
    if conn is not None and conn.is_connected():
        if cursor is not None:
            cursor.close()
        conn.close()

    

上面的程式碼看起來有一點長,不過其實很簡單,一開始先定義 conn 和 cursor 變數,避免突然發生錯誤連變數都還沒建立。 然後就是使用必要資訊建立資料庫連接、執行 SQL 語法、錯誤處理、關閉資料庫連線。

大部分的錯誤都會是 mysql.connector.Error ,不過還是有可能有少部分是其他例外。

新增/插入資料

建立好資料表後接下來就是新增資料了,這裡我們會將新增的語法建立好,但是不會包含實際資料,而是等要執行的時候再將資料帶入:
    
import mysql.connector

conn = None
cursor = None

try:
    # 建立資料庫連接
    conn = mysql.connector.connect(
        host="localhost",  # 資料庫主機地址
        user="ruyut",  # 資料庫使用者名稱
        password="ruyut",  # 資料庫密碼
        database="mydb"  # 要連接的資料庫名稱
    )

    cursor = conn.cursor()

    insert_user_sql = """
        insert into users(username, email) values(%s, %s);
    """

    username = "ruyut"
    email = "a@ruyut.com"

    data = (username, email)
    cursor.execute(insert_user_sql, data)

    conn.commit()  # 少了這個資料就不會真正的進入到資料庫中


except mysql.connector.Error as e:
    print(f"資料庫執行失敗:{e}")
except Exception as e:
    print(f"出現錯誤:{e}")
finally:
    # 關閉資料庫連接
    if conn is not None and conn.is_connected():
        if cursor is not None:
            cursor.close()
        conn.close()

    

唯一要比較注意的就是需要執行 commit ,如果沒有執行 commit 資料並不會真正的儲存到資料庫中。

因為資料庫連接、錯誤處理和關閉連接的許多程式碼都重複了,後面的範例會省略掉這部分固定的程式碼。

查詢資料

查詢 users 資料表中的所有資料
    
    get_all_users_sql = "select * from users"

    cursor.execute(get_all_users_sql)

    for(user_id, username, email, created_at) in cursor:
        print(f"{user_id}, {username}, {email}, {created_at}")

    print(f"查詢結果有 {cursor.rowcount} 筆資料")
    

也可以使用參數查詢,例如依照使用者名稱查詢:
    
    get_user_sql = "select * from users where username = %s"

    username = "ruyut"

    cursor.execute(get_user_sql, (username,))

    for (user_id, username, email, created_at) in cursor:
        print(f"{user_id}, {username}, {email}, {created_at}")

    print(f"查詢結果有 {cursor.rowcount} 筆資料")
    

更新資料

依照 username 尋找使用者,並更新 email
    
    update_user_sql = "update users set email = %s where username = %s"

    username = "ruyut"
    email = "b@ruyut.com"

    cursor.execute(update_user_sql, (email, username))
    conn.commit()

    print(f"更新了 {cursor.rowcount} 筆資料")

    

刪除資料

    
    delete_user_sql = "delete from users where username = %s"
    username = "ruyut"
    cursor.execute(delete_user_sql, (username,))
    conn.commit()

    print(f"刪除了 {cursor.rowcount} 筆資料")
    



參考資料:
MySQL.dev - MySQL Connector/Python Developer Guide

留言