跳到主要内容

使用 MySQL

MySQL 是 Web 中最常用的数据库服务器。SQLite 轻量、可嵌入,不能承受高并发,适合桌面和移动;MySQL 面向服务器,能承受高并发,占用内存远大于 SQLite。MySQL 内部有多种引擎,最常用支持事务InnoDB

1. 安装 MySQL

  • MySQL 官网 下载 Community Server 8.x,跨平台,选对应平台安装即可。
  • 安装时会提示设置 root 用户口令,务必记住(可暂设为 password)。
  • Windows:安装时选择 UTF-8 编码,以便正确处理中文。
  • Mac / Linux:编辑配置文件 /etc/my.cnf/etc/mysql/my.cnf,将默认编码改为 utf8mb4
[client]
default-character-set = utf8mb4

[mysqld]
default-storage-engine = INNODB
character-set-server = utf8mb4
collation-server = utf8_general_ci
  • 重启 MySQL 后,用客户端执行 show variables like '%char%',看到 utf8mb4 即表示编码正确。
  • 注意:若 MySQL 版本 < 5.5.3,只能设为 utf8utf8mb4 支持最新 Unicode(含 emoji),utf8 不能显示 emoji。

2. 用 Docker 启动 MySQL

  • 若不想本地安装,可用 Docker 快速启动。
  • 先安装 Docker Desktop,再执行(参数见下):
docker run -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 --name mysql-8.4 \
-v ./mysql-data:/var/lib/mysql mysql:8.4 \
--mysql-native-password=ON \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
参数含义
-e MYSQL_ROOT_PASSWORD=passwordroot 口令
-p 3306:3306本机 3306 端口映射
--name mysql-8.4容器名称
-v ./mysql-data:/var/lib/mysql数据持久化,避免容器删除后数据丢失
mysql:8.4镜像
--mysql-native-password=ON启用明文口令
--character-set-server / collation-serverutf8mb4 字符集与排序规则
  • 日志中出现 ready for connections 表示启动成功。

3. 安装 MySQL 驱动与连接

  • MySQL 以独立进程、网络对外服务,Python 需通过驱动连接。
  • 官方驱动:mysql-connector-python
pip install mysql-connector-python
  • 连接与游标:mysql.connector.connect(...) 得到 Connectionconn.cursor() 得到 Cursor;操作与 SQLite 类似,符合 DB-API 通用约定。
import mysql.connector

# 将 password 改为你的 root 口令
conn = mysql.connector.connect(user='root', password='password', database='test')
cursor = conn.cursor()

4. 建表、插入与提交事务

  • 建表cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
  • 插入:MySQL 的占位符为 %s(不是 ?);执行 INSERT 等写操作后必须调用 conn.commit() 提交事务,否则不会真正写入。
cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
cursor.rowcount # 1
conn.commit() # 必须提交

5. 查询与关闭

  • 查询cursor.execute('select * from user where id = %s', ('1',)),占位符同样用 %scursor.fetchall() 得到结果列表。
  • 用完后 cursor.close()conn.close() 关闭资源。
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall() # [('1', 'Michael')]
cursor.close()
conn.close()

6. 小结

要点说明
驱动pip install mysql-connector-pythonimport mysql.connector
连接mysql.connector.connect(user=..., password=..., database=...)
占位符MySQL 使用 %s(与 SQLite 的 ? 不同)
写操作INSERT/UPDATE/DELETE 后必须 conn.commit() 提交事务
编码建议服务端与连接均使用 utf8mb4

记忆:MySQL 用 %s、写后必 commit;编码用 utf8mb4;代码风格与 SQLite 类似,遵循 DB-API。