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