使用数据库——具体使用Python的DB-API:让数据“住”进专业仓库 🗄️

229次阅读

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

关键字:数据库、关系型数据库、DB-API

内容详解:
之前用文件存数据像“把东西堆在纸箱里”——找起来慢、容易乱。而 数据库 是“带货架 + 索引的专业仓库”:

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

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

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“对话”啦!

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 %} 循环展示每条日志——数据库里的数据,轻松读写!

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 核心代码清单

正文完
 0