人工智能之編程進階 Python高級

第七章 數據庫類模塊


(文章目錄)


前言

本文主要講述兩類數據庫,關係型數據庫mysql和非關係型數據庫mongodb的常見操作步驟。


🗄️ 一、MySQL(關係型數據庫)

1. 安裝(本地開發)

Windows / macOS:

  • 推薦使用 MySQL Installer(官方圖形化安裝)
  • 或用包管理器:
    • macOS​: brew install mysql
    • ​Windows (WSL): sudo apt install mysql-server

啓動服務:

# 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 (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》