我們將通過一個實例來探討如何使用Python與MySQL數據庫進行交互,以構建一個簡單的學生信息管理系統。這個系統將能夠執行基本的CRUD(創建(Create)、讀取(Retrieve)、更新(Update)、刪除(Delete))操作,以管理學生信息。我們將使用`mysql-connector-python`庫來連接MySQL數據庫,該庫是官方推薦的Python MySQL驅動程序。
#### 準備工作
首先,確保你的環境中安裝了MySQL服務器和Python。接下來,安裝`mysql-connector-python`庫:
```bash
pip install mysql-connector-python
```
#### 數據庫準備
1. **創建數據庫**: 登錄到MySQL客戶端,創建一個名為`student_manager`的數據庫。
```sql
CREATE DATABASE student_manager;
USE student_manager;
```
2. **創建表**: 創建一個名為`students`的表,用來存儲學生信息。
```sql
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,class VARCHAR(10)
);
```
#### Python代碼實現
接下來,我們使用Python編寫一個簡單的腳本來實現學生信息管理系統的功能。```python
import mysql.connector
from mysql.connector import Errordef create_connection():"""創建數據庫連接"""connection = Nonetry:connection = mysql.connector.connect(host='localhost',user='your_username', ?# 替換為你的MySQL用戶名password='your_password', ?# 替換為你的MySQL密碼database='student_manager')print("Connection to MySQL DB successful")except Error as e:print(f"The error '{e}' occurred")return connectiondef execute_query(connection, query):"""執行SQL查詢"""cursor = connection.cursor()try:cursor.execute(query)connection.commit()print("Query executed successfully")except Error as e:print(f"The error '{e}' occurred")def fetch_data(connection, query):"""獲取數據"""cursor = connection.cursor()result = Nonetry:cursor.execute(query)result = cursor.fetchall()return resultexcept Error as e:print(f"The error '{e}' occurred")finally:cursor.close()def main():connection = create_connection()# 插入數據示例insert_query = """INSERT INTO students (name, age, class) VALUES('Alice', 20, 'A1'),('Bob', 22, 'B2'),('Charlie', 19, 'A1');"""execute_query(connection, insert_query)# 查詢所有學生select_query = "SELECT * FROM students"students = fetch_data(connection, select_query)for student in students:print(student)# 更新數據示例update_query = "UPDATE students SET class = 'C3' WHERE name = 'Bob'"execute_query(connection, update_query)# 刪除數據示例delete_query = "DELETE FROM students WHERE name = 'Charlie'"execute_query(connection, delete_query)connection.close()if __name__ == '__main__':main()
```
#### 解釋
- **`create_connection`**: 創建一個到MySQL數據庫的連接。
- **`execute_query`**: 執行SQL查詢,用于插入、更新和刪除操作。
- **`fetch_data`**: 執行查詢并返回所有結果,主要用于檢索數據。
- **`main`**: 主函數,展示了如何使用上述函數完成CRUD操作。首先插入幾條示例數據,然后查詢所有學生信息并打印,接著更新和刪除學生記錄。
#### 注意事項
- 在實際應用中,請確保替換`your_username`和`your_password`為你的MySQL數據庫的實際登錄憑證。
- 本示例中的SQL語句是硬編碼的,實際開發中可能需要根據用戶輸入動態構建SQL語句,注意防范SQL注入攻擊。
- 在處理完數據庫操作后,記得關閉連接以釋放資源。
為了將上述Python與MySQL交互的簡單學生信息管理系統以網頁的形式展示,我們可以使用Flask框架,這是一個輕量級的Web服務器網關接口(WSGI)框架,非常適合小型應用和初學者學習Web開發。下面是如何將上述功能轉化為一個簡單的網頁應用的示例。
### 安裝Flask
首先,確保安裝Flask和Flask-MySQL庫:
```bash
pip install Flask flask-mysqldb
```
### 編寫Flask應用
接下來,創建一個名為`app.py`的文件,編寫Flask應用代碼:```python
from flask import Flask, render_template, request, redirect, url_for
from flask_mysqldb import MySQLapp = Flask(__name__)# 配置MySQL
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'your_username' ?# 替換為你的MySQL用戶名
app.config['MYSQL_PASSWORD'] = 'your_password' ?# 替換為你的MySQL密碼
app.config['MYSQL_DB'] = 'student_manager'mysql = MySQL(app)@app.route('/')
def index():cur = mysql.connection.cursor()cur.execute('SELECT * FROM students')data = cur.fetchall()cur.close()return render_template('index.html', students=data)@app.route('/add_student', methods=['POST'])
def add_student():if request.method == 'POST':name = request.form['name']age = request.form['age']class_ = request.form['class']cur = mysql.connection.cursor()cur.execute('INSERT INTO students (name, age, class) VALUES (%s, %s, %s)', (name, age, class_))mysql.connection.commit()cur.close()return redirect(url_for('index'))@app.route('/delete/<string:id>')
def delete_student(id):cur = mysql.connection.cursor()cur.execute('DELETE FROM students WHERE id = %s', (id,))mysql.connection.commit()cur.close()return redirect(url_for('index'))if __name__ == '__main__':app.run(debug=True)
```
### 創建HTML模板
在你的項目目錄下創建一個名為`templates`的文件夾,并在其中創建一個`index.html`文件,用于展示學生列表和添加學生的表單:
```html
<!doctype html>
<html>
<head><title>學生信息管理系統</title><!-- 內聯樣式 --><style>body {font-family: Arial, sans-serif;margin: 20px;}h2 {color: #4CAF50;margin-bottom: 10px;}table {width: 100%;border-collapse: collapse;}th, td {padding: 15px;text-align: left;border: 1px solid #ddd;}th {background-color: #f2f2f2;font-weight: bold;}tr:nth-child(even) {background-color: #f2f2f2;}tr:hover {background-color: #ddd;}form input[type="submit"] {background-color: #4CAF50;color: white;padding: 8px 16px;border: none;cursor: pointer;}form input[type="submit"]:hover {background-color: #45a049;}</style>
</head>
<body><h2>學生列表</h2><table border="1"><tr><th>ID</th><th>姓名</th><th>年齡</th><th>班級</th><th>操作</th></tr><!-- 假設這里由后端動態填充學生數據 --><!-- 示例數據,實際應用中將由Flask動態生成 -->{% for student in students %}<tr><td>{{ student[0] }}</td><td>{{ student[1] }}</td><td>{{ student[2] }}</td><td>{{ student[3] }}</td><td><a href="{{ url_for('delete_student', id=student[0]) }}">刪除</a></td></tr>{% endfor %}</table><h2>添加學生</h2><form action="{{ url_for('add_student') }}" method="post">姓名:<input type="text" name="name"><br>年齡:<input type="number" name="age"><br>班級:<input type="text" name="class"><br><input type="submit" value="添加"></form>
</body>
</html>
通過這個簡單的例子,我們不僅學習了如何使用Python與MySQL進行交互,還了解了如何構建一個基礎的數據庫應用程序框架。希望這能為你進一步探索數據庫管理和Python編程提供一個良好的起點。