1. 数据库:比文件更专业的“数据仓库”🤔
内容详解:
之前用文件存数据像“把东西堆在纸箱里”——找起来慢、容易乱。而 数据库 是“带货架 + 索引的专业仓库”:
- 📚 关系型数据库(比如 MySQL):用“表”存数据(像 Excel 表格),支持快速查询、修改、去重;
- 🔌 DB-API:Python 和数据库通信的“通用接口”——不管用 MySQL、SQLite 还是其他数据库,都能用一套类似的代码操作,不用学多种语法!
类比:文件是“纸箱”,数据库是“超市货架”——想找某件商品(数据),直接按分类(表)+ 编号(索引)拿,又快又准~
2. 先搭环境:安装 MySQL+Python 驱动 🛠️
关键字:MySQL 安装、数据库驱动、Connector/Python
内容详解:
要让 Python 连 MySQL,得做两步准备:
- 步骤 1:安装 MySQL 服务器
像“买一个仓库架子”——下载 MySQL 安装包(官网或用软件管理工具),安装后启动服务(相当于打开仓库大门)。 - 步骤 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 核心代码清单?
正文完