人工智能之編程進階 Python高級
第七章 數據庫類模塊
(文章目錄)
前言
本文主要講述兩類數據庫,關係型數據庫mysql和非關係型數據庫mongodb的常見操作步驟。
🗄️ 一、MySQL(關係型數據庫)
1. 安裝(本地開發)
Windows / macOS:
- 推薦使用 MySQL Installer(官方圖形化安裝)
- 或用包管理器:
- macOS:
brew install mysql - Windows (WSL):
sudo apt install mysql-server
- macOS:
啓動服務:
# macOS (Homebrew)
brew services start mysql
# Linux
sudo systemctl start mysql
初始設置:
-- 登錄(默認無密碼或 root 密碼是你設的)
mysql -u root -p
-- 創建數據庫和用户(可選)
CREATE DATABASE testdb;
CREATE USER 'dev'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON testdb.* TO 'dev'@'localhost';
FLUSH PRIVILEGES;
2. Python 連接
安裝驅動:
pip install PyMySQL # 純 Python 實現,推薦
# 或
pip install mysql-connector-python # 官方驅動
連接代碼(以 PyMySQL 為例):
import pymysql
conn = pymysql.connect(
host='localhost',
user='dev', # 或 'root'
password='123456',
database='testdb',
charset='utf8mb4'
)
cursor = conn.cursor()
✅ 建議搭配 ORM:
SQLAlchemy(更安全、易維護)
3. 增刪改查(CRUD)
先建表:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100),
age INT
);
✅ 插入(Create)
cursor.execute(
"INSERT INTO users (name, email, age) VALUES (%s, %s, %s)",
("Alice", "alice@example.com", 30)
)
conn.commit() # 必須提交!
🔍 查詢(Read)
cursor.execute("SELECT * FROM users WHERE age > %s", (25,))
rows = cursor.fetchall()
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}")
✏️ 更新(Update)
cursor.execute(
"UPDATE users SET age = %s WHERE name = %s",
(31, "Alice")
)
conn.commit()
❌ 刪除(Delete)
cursor.execute("DELETE FROM users WHERE name = %s", ("Alice",))
conn.commit()
⚠️ 注意:所有寫操作(INSERT/UPDATE/DELETE)都要
conn.commit()!
📦 二、MongoDB(文檔型 NoSQL 數據庫)
1. 安裝(本地開發)
官方方式:
- 下載社區版:https://www.mongodb.com/try/download/community
- 或用包管理器:
- macOS:
brew tap mongodb/brew && brew install mongodb-community - Windows: 用 MSI 安裝包
- Linux: 按官方文檔配置 apt/yum 源
- macOS:
啓動服務:
# macOS (Homebrew)
brew services start mongodb-community
# 默認數據目錄:/data/db(需提前創建並賦權限)
sudo mkdir -p /data/db
sudo chown -R `id -un` /data/db
驗證:
mongosh # 進入交互 shell
> show dbs
2. Python 連接
安裝驅動:
pip install pymongo
連接代碼:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/') # 默認端口 27017
db = client['myapp'] # 數據庫名(不存在會自動創建)
collection = db['users'] # 集合名(相當於“表”)
💡 MongoDB 不需要提前建庫/建集合,首次插入時自動創建。
3. 增刪改查(CRUD)
MongoDB 中的數據是 BSON(類似 JSON)文檔。
✅ 插入(Create)
# 插入單個文檔
result = collection.insert_one({
"name": "Bob",
"email": "bob@example.com",
"age": 28,
"hobbies": ["gaming", "music"]
})
print("Inserted ID:", result.inserted_id)
# 插入多個
collection.insert_many([
{"name": "Charlie", "age": 35},
{"name": "Diana", "tags": ["admin"]}
])
🔍 查詢(Read)
# 查所有
for doc in collection.find():
print(doc)
# 條件查詢(年齡 > 25)
for doc in collection.find({"age": {"$gt": 25}}):
print(doc["name"])
# 只返回部分字段
doc = collection.find_one({"name": "Bob"}, {"name": 1, "email": 1, "_id": 0})
print(doc) # {'name': 'Bob', 'email': 'bob@example.com'}
✏️ 更新(Update)
# 更新第一個匹配項
collection.update_one(
{"name": "Bob"},
{"$set": {"age": 29}, "$push": {"hobbies": "reading"}}
)
# 更新所有匹配項
collection.update_many(
{"age": {"$lt": 30}},
{"$set": {"young": True}}
)
❌ 刪除(Delete)
# 刪除一個
collection.delete_one({"name": "Bob"})
# 刪除多個
collection.delete_many({"young": True})
# 清空整個集合
collection.delete_many({})
✅ MongoDB 所有操作都是自動提交的,無需手動 commit。
🔍 三、MySQL vs MongoDB 對比總結
| 項目 | MySQL | MongoDB |
|---|---|---|
| 類型 | 關係型(RDBMS) | 文檔型(NoSQL) |
| 數據結構 | 表(固定列) | 集合(靈活 JSON 文檔) |
| Schema | 強 Schema(必須先定義) | 動態 Schema(隨時變) |
| 查詢語言 | SQL | MongoDB 查詢語法(字典風格) |
| 事務 | ✅ 強 ACID(默認支持) | ✅ 多文檔事務(4.0+,但慎用) |
| 擴展性 | 垂直擴展為主,分片複雜 | 天然支持水平分片(Sharding) |
| 性能特點 | 複雜 JOIN 快,寫入中等 | 寫入快,高吞吐,JOIN 弱 |
| 適用場景 | 訂單、支付、財務等強一致性系統 | 日誌、內容管理、用户畫像、IoT 等靈活場景 |
| Python 驅動 | PyMySQL,mysql-connector |
pymongo |
| 是否需要預建表 | ✅ 是 | ❌ 否 |
✅ 四、怎麼選?一句話建議
- 選 MySQL: 如果你的數據關係明確、不能出錯(比如銀行轉賬、電商訂單),或者團隊熟悉 SQL。
- 選 MongoDB: 如果你的數據結構經常變、需要快速迭代(比如 App 用户配置、行為日誌),或者討厭寫複雜的表結構。
💡 現實建議: 很多公司 兩者都用!
- 核心業務用 MySQL(保安全)
- 靈活數據用 MongoDB(提效率)
🧰 附:常用命令速查
| 操作 | MySQL | MongoDB |
|---|---|---|
| 啓動服務 | sudo systemctl start mysql |
brew services start mongodb-community |
| 進入命令行 | mysql -u root -p |
mongosh |
| 查數據庫 | SHOW DATABASES; |
show dbs |
| 切換庫 | USE testdb; |
use myapp |
| 查表/集合 | SHOW TABLES; |
show collections |
資料關注
公眾號:咚咚王
《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen) 》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》