註: 本次示範使用 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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com