Python - 資料庫存取

你好,有抱負的Python程序設計師!很高興能夠成為你在這個使用Python進行資料庫存取的精彩旅程中的導遊。作為一個教了多年程式設計的人,我可以向您保證,這項技能不僅至關重要,而且非常強大。那麼,讓我們深入探究,解鎖Python操作資料庫的秘密!

Python - Database Access

Python中的資料庫存取

想像一下你在組織一個巨大的圖書館。你有成千上萬的書籍,你需要一個系統來跟蹤它們。這基本上就是資料庫所做的,但它是為了數字信息。Python作為一種多功能的語言,提供了多種與資料庫互動的方式。今天,我們將專注於兩種流行的方法:使用sqlite3模塊操作SQLite資料庫和PyMySQL模塊操作MySQL資料庫。

sqlite3模塊

SQLite就像一個內建在Python中的迷你資料庫。它非常適合小型應用程序或當你剛開始學習時。讓我們從導入模塊開始:

import sqlite3

這一行就像告訴Python:“嘿,我們將要使用SQLite資料庫,所以要做好準備!”

連接對象

要操作資料庫,我們首先需要連接到它。把它想像成敲你數字圖書館的門。以下是我們如何做到這一點:

conn = sqlite3common("example.db")

如果“example.db”不存在,這一行會創建一個新的資料庫文件,或者如果它存在,就打開它。conn變量是我們進入這個資料庫的鑰匙。

游標對象

現在我們在數字圖書館內,我們需要一種方式來移動並操作東西。這就是游標所做的。讓我們創建一個:

cursor = conn.cursor()

把游標想像成你的圖書管理員助手,準備根據你的命令检索或修改信息。

創建資料庫表

讓我們創建一個表來存儲一些信息。想像我們正在編目書籍:

cursor.execute('''CREATE TABLE IF NOT EXISTS books
(id INTEGER PRIMARY KEY,
title TEXT,
author TEXT,
year INTEGER)''')

這個SQL命令創建了一個名為“books”的表,其中包含id、title、author和year的列。IF NOT EXISTS部分確保我們不會意外創建重複的表。

插入操作

現在,讓我們在資料庫中添加一些書籍:

cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("To Kill a Mockingbird", "Harper Lee", 1960))
conn.commit()

這會在我們的表中插入一本新書。?符號是數據的佔位符,有助於防止SQL注入攻擊(這是另一天的話題!)。commit()方法保存了我們的更改。

讀取操作

讓我們检索一些數據:

cursor.execute("SELECT * FROM books")
books = cursor.fetchall()
for book in books:
print(f"ID: {book[0]}, Title: {book[1]}, Author: {book[2]}, Year: {book[3]}")

這會抓取所有的書並打印它們。這就像要求我們的圖書管理員向我們展示我們所有的書。

更新操作

需要糾正一些信息嗎?沒問題:

cursor.execute("UPDATE books SET year = ? WHERE title = ?", (1925, "The Great Gatsby"))
conn.commit()

這會更新“The Great Gatsby”的出版年份。記住,始終要提交你的更改!

刪除操作

有時我們需要刪除條目:

cursor.execute("DELETE FROM books WHERE author = ?", ("J.K. Rowling",))
conn.commit()

這會從我們的資料庫中刪除所有J.K. Rowling的書籍。在使用DELETE操作時要小心 - 資料庫中沒有撤銷按鈕!

执行交易

交易是一種將操作組合在一起的方式。如果任何操作失敗,則它們都會被取消。這就像一種“全有或全無”的方法:

try:
conn.execute("BEGIN TRANSACTION")
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("1984", "George Orwell", 1949))
cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)",
("Animal Farm", "George Orwell", 1945))
conn.commit()
print("Transaction successful!")
except sqlite3.Error as e:
conn.rollback()
print(f"An error occurred: {e}")

提交操作

我們在示例中一直使用commit()。這對於保存我們對資料庫的更改至關重要。沒有它,我們的更改將在我們關閉連接時遺失。

回滾操作

如果交易過程中出現問題,我們可以使用rollback()來取消自上次提交以來的所有更改:

try:
# 一些資料庫操作
conn.commit()
except sqlite3.Error:
conn.rollback()

PyMySQL模塊

雖然SQLite對於學習和小型應用程序很棒,但許多實際項目使用更健壯的資料庫,如MySQL。讓我們快速看看如何使用PyMySQL:

import pymysql

conn = pymysql.connect(host='localhost',
user='your_username',
password='your_password',
database='your_database')

try:
with conn.cursor() as cursor:
sql = "INSERT INTO users (email, password) VALUES (%s, %s)"
cursor.execute(sql, ('[email protected]', 'very-secret'))
conn.commit()
finally:
conn.close()

基本原理與SQLite相似,但PyMySQL允許我們連接到遠程MySQL資料庫。

處理錯誤

在處理資料庫時,錯誤處理至關重要。始終使用try-except塊來捕獲並處理潛在的錯誤:

try:
# 資料庫操作在這裡
except sqlite3.Error as e:
print(f"An error occurred: {e}")
finally:
conn.close()

這可以確保我們以优雅的方式處理錯誤,並且即使出現錯誤,也始終關閉我們的資料庫連接。

以下是我們涵蓋的主要資料庫操作總結表:

操作 描述 示例
連接 建立與資料庫的連接 conn = sqlite3common("example.db")
創建 創建新的表或記錄 cursor.execute("CREATE TABLE...")
插入 向表中添加新記錄 cursor.execute("INSERT INTO...")
選擇 從資料庫中检索數據 cursor.execute("SELECT...")
更新 修改現有記錄 cursor.execute("UPDATE...")
刪除 從表中刪除記錄 cursor.execute("DELETE FROM...")
提交 將更改保存到資料庫 conn.commit()
回滾 取消自上次提交以來的更改 conn.rollback()

就是這樣!你剛剛踏出了使用Python進行資料庫存取的第一步。記住,熟練才能精通,所以不要害怕實驗這些概念。在你意識到之前,你將能夠像專業人士一樣管理數據!愉快的編程,願你的資料庫始終保持有序且無錯誤!

Credits: Image by storyset