1. 数据库:比文件更专业的“数据仓库” 🤔

关键字

:数据库、关系型数据库、DB-API 内容详解: 之前用文件存数据像“把东西堆在纸箱里”——找起来慢、容易乱。而

数据库

是“带货架+索引的专业仓库”:

  • 📚 关系型数据库(比如MySQL):用“表”存数据(像Excel表格),支持快速查询、修改、去重;
  • 🔌 DB-API:Python和数据库通信的“通用接口”——不管用MySQL、SQLite还是其他数据库,都能用一套类似的代码操作,不用学多种语法!

类比:文件是“纸箱”,数据库是“超市货架”——想找某件商品(数据),直接按分类(表)+编号(索引)拿,又快又准~

二、准备工作:安装MySQL+驱动

2. 先搭环境:安装MySQL+Python驱动 🛠️

关键字

:MySQL安装、数据库驱动、Connector/Python 内容详解: 要让Python连MySQL,得做两步准备:

  1. 步骤1:安装MySQL服务器 像“买一个仓库架子”——下载MySQL安装包(官网或用软件管理工具),安装后启动服务(相当于打开仓库大门)。
  2. 步骤2:安装Python的MySQL驱动 像“配一把仓库钥匙”——用pip install mysql-connector-python安装驱动(Python通过它和MySQL通信)。

准备好后,Python就能和MySQL“对话”啦!

三、核心:用DB-API操作数据库——增删改查

3. DB-API实战:Python操作MySQL的“四字诀”(增删改查) ⚡

关键字

:连接数据库、游标、SQL语句 内容详解: Python用DB-API操作数据库的流程是:

连接数据库→创建游标→执行SQL→处理结果→关闭连接

。以“Web日志存数据库”为例:

# 1. 导入驱动
import mysql.connector
from flask import Flask, request
import datetime

app = Flask(__name__)

# 2. 连接数据库的函数(复用代码)
def get_db_connection():
    conn = mysql.connector.connect(
        host="localhost",  # 数据库地址(本地是localhost)
        user="root",       # 数据库用户名
        password="你的密码", # 数据库密码
        database="web_log_db"  # 要连接的数据库名
    )
    return conn

# 3. 初始化数据库(创建表)
def init_db():
    conn = get_db_connection()
    cursor = conn.cursor()
    # 执行SQL:创建日志表
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS access_log (
            id INT AUTO_INCREMENT PRIMARY KEY,
            log_time DATETIME,
            user_ip VARCHAR(20),
            action VARCHAR(50)
        )
    ''')
    conn.commit()  # 提交修改
    cursor.close()
    conn.close()

# 4. 写日志到数据库(增)
@app.route("/")
def home():
    now = datetime.datetime.now()
    user_ip = request.remote_addr
    action = "访问首页"
    
    conn = get_db_connection()
    cursor = conn.cursor()
    # 执行SQL:插入数据(%s是占位符,防止SQL注入)
    cursor.execute(
        "INSERT INTO access_log (log_time, user_ip, action) VALUES (%s, %s, %s)",
        (now, user_ip, action)
    )
    conn.commit()  # 插入/修改/删除要commit
    cursor.close()
    conn.close()
    
    return "首页(日志已存数据库)"

# 5. 从数据库读日志(查)
@app.route("/show_db_log")
def show_db_log():
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM access_log")  # 查所有日志
    logs = cursor.fetchall()  # 获取所有结果(是元组列表)
    cursor.close()
    conn.close()
    
    # 把结果传给模板展示
    return render_template("db_log_page.html", logs=logs)

if __name__ == "__main__":
    init_db()  # 启动时初始化数据库
    app.run(debug=True)

模板

db_log_page.html

里可以用

{% for log in logs %}

循环展示每条日志——数据库里的数据,轻松读写!

四、DB-API的“通用优势”:换数据库不用大改代码

4. DB-API的妙处:换数据库“无缝衔接” 🚀

关键字

:DB-API通用性、跨数据库兼容 内容详解: DB-API是“通用接口”——比如你现在用MySQL,想换成SQLite,只需要改

连接数据库的代码

,其他操作(增删改查)的代码基本不用动:

# 换成SQLite的连接代码(不用装额外驱动,Python自带)
import sqlite3
def get_db_connection():
    conn = sqlite3.connect("web_log.db")  # SQLite用文件存数据库
    conn.row_factory = sqlite3.Row  # 让结果能按列名取(更方便)
    return conn

这就是DB-API的好处:写一次代码,能适配多种数据库,不用为每个数据库学一套新语法!

五、现实注意:数据库的“安全&效率”

5. 实战避坑:数据库的安全与效率 🚨

关键字

:SQL注入、连接池、索引 内容详解: 用数据库要注意两个关键点:

  • 🔒 防SQL注入:永远用%s占位符传参数(像前面的代码那样),别直接把用户输入拼到SQL里(比如"INSERT INTO log VALUES ('"+user_ip+"')"会被黑客利用);

  • 提升效率

    • 连接池:频繁连数据库会慢,提前创建一批连接复用;
    • 索引:给常用查询的列(比如user_ip)加索引,查询速度会翻倍。

要不要我帮你整理一份

Python操作MySQL的DB-API核心代码清单