MySQL 是一款开源的数据库软件,也是目前使用最多的数据管理系统之一。很多编程语言的相关项目都会使用 MySQL 作为主要的数据库,包括 Python、Go、PHP 等。

MySQL 的下载与安装比较复杂,具体请查看配套文件中的 “MySQL 安装教程”。请把 MySQL 安装完成后,再去学习接下来的内容。
使用 Navicat for MySQL
MySQL 本身并未提供一个可视化管理工具。如果不借助其他工具,就得使用命令行的方式(如如下图所示)来操作。我们都知道,命令行这种方式有时是比较麻烦的。

对于初学者来说,如果想要更轻松地使用 MySQL,这里推荐使用 Navicat for MySQL 这个软件来辅助学习。

对于 Navicat for MySQL,小伙伴们可以自行搜索一下,在其官方网站中可以找到下载链接。
提示: 如果想要使用 MySQL 进行开发,除了使用 Navicat for MySQL 之外,还可以使用 Workbench、phpMyAdmin、MySQL Browser 等。
任何数据库的操作本身都不简单,想要在 Navicat for MySQL 中操作 MySQL,需要执行这 4 步:① 连接 MySQL;② 创建数据库;③ 创建表;④ 运行代码。
1. 连接 MySQL
① 连接 MySQL:打开 Navicat for MySQL 后,在上方菜单栏依次找到【连接】→【MySQL】,如下图所示。

② 填写连接信息:在弹出的新窗口中,这里的 “连接名” 随便写即可,然后密码就是 root 用户的密码,如下图所示。填写完成后,单击【确定】按钮。
为了方便学习,你可以将密码设置得简单一点,比如我这里就是设置成 “123456”。但在实际开发中,考虑到安全性问题,密码还是要尽可能设置得复杂一点。

③ 打开连接:在左侧菜单栏中选中【pyconnect】这一项,单击鼠标右键并选择【打开连接】,如下图所示,这样就打开连接了。或者,直接双击【pyconnect】这一项也行。

2. 创建数据库
① 新建数据库:在左侧菜单栏选中【pyconnect】,单击鼠标右键选择【新建数据库】,如下图所示。

② 填写数据库名:在弹出的窗口中,填写数据库的基本信息,这里只需填写数据库的名字即可。数据库的名字是随便取的,我这里填写的是 “test”,然后单击【确定】按钮,如下图所示。

③ 打开数据库:在左边菜单栏中选中【test】这个数据库,单击鼠标右键并选择【打开数据库】,如下图所示。或者,直接双击【test】这个数据库也行。

3. 创建表
① 新建表:在【test】这个数据库内部选中【表】这一项,单击鼠标右键并选择【新建表】,如下图所示。

② 填写表信息:接下来创建一个名为 product 的表,该表保存的是商品的基本信息,包括编号、名称、类型、售价等。product 表的字段信息如下图所示。

我们还需要设置 id 这一列为主键才行,首先单击选中 id 这一列,然后单击鼠标右键并选择【主键】,如下图所示。

设置完主键之后,可以看到 id 列中【不是 null】这一项前面打上了 “√”,并且左边会有一把钥匙状的小图标,如下图所示。

③ 填写表名:字段填写完成之后,使用 “Ctrl+S” 组合键就可以保存了。然后会弹出一个填写表名的对话框,这里填写的是 “product”,如下图所示。

④ 打开表:在左侧菜单栏中单击【表】左侧的箭头 “>” 展开,然后选中【product】表,单击鼠标右键并选择【打开表】,如下图所示。

⑤ 添加数据:打开表之后,我们可以通过单击左下角的 “+” 来添加一行数据,添加完成之后,再单击 “√” 就可以完成一行数据的添加了,如下图所示。

4. 运行代码
① 新建查询:在 Navicat for MySQL 上方单击【新建查询】,就会打开一个代码窗口。选择你想要使用的数据库,这里选择的是【test】,如下图所示。

② 运行代码:在打开的代码窗口中,尝试输入一句简单的 SQL 代码 “select * from product;”,然后单击上方的【运行】按钮,就会自动执行并显示结果,如下图所示。

最后,对于 Navicat for MySQL 的使用,我们还需要特别注意以下两点(非常重要)。
- 在执行 SQL 语句之前,一定要确保选择了正确的数据库,否则就可能会报错。
- 所有的 SQL 语句(包括查询、插入、更新、删除等),都是在【新建查询】这个窗口执行的,而不仅仅只有查询语句才可以。
提示: 在 MySQL 中创建数据库以及表,除了使用 Navicat for MySQL 软件界面的方式来创建之外,同样可以使用类似于 SQL 代码的方式来创建,具体步骤和 SQLite 的类似。
使用 pymysql 连接 MySQL
在 Python 中,我们可以使用 pymysql 模块来操作 MySQL。由于 pymysql 是第三方模块,在使用之前,需要执行以下命令来安装。
pip install pymysqlMySQL 和 SQLite 的操作非常相似,对数据的 “增删查改” 操作同样也需要以下 5 步。
- 创建连接。
- 创建游标。
- 执行 SQL 语句。
- 关闭游标。
- 关闭连接。
示例:连接 MySQL 的基本步骤
import pymysql
# 创建连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
password='123456',
db='test',
charset='utf8')
# 创建游标
cursor = conn.cursor()
# 执行 SQL 语句,增加数据
cursor.execute('insert into product (id, name, type, price) values (6, "盘子", "餐具", 89.0)')
cursor.execute('insert into product (id, name, type, price) values (7, "衬衫", "衣服", 69.0)')
cursor.execute('insert into product (id, name, type, price) values (8, "裙子", "衣服", 60.0)')
cursor.execute('insert into product (id, name, type, price) values (9, "夹克", "衣服", 79.0)')
cursor.execute('insert into product (id, name, type, price) values (10, "短裤", "衣服", 39.9)')
# 关闭游标
cursor.close()
# 提交事务
conn.commit()
# 关闭连接
conn.close()运行后打开 Navicat for MySQL,可以看到 product 表增加了 5 条记录,如下图所示。

# 创建连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
password='123456',
db='test',
charset='utf8')上面代码表示连接数据库,host 是主机地址,port 是端口号,user 是用户名,password 是密码,db 是数据库名,charset 是字符编码。需要注意的是,charset 的值不能写成 'utf-8',而必须写成 'utf8'。
对于同时增加多条数据,pymysql 提供了更为简单的方法:excutemany()。对于这个示例来说,下面两种方式是等价的。
# 方式 1
cursor.execute('insert into product (id, name, type, price) values (6, "盘子", "餐具", 89.0)')
cursor.execute('insert into product (id, name, type, price) values (7, "衬衫", "衣服", 69.0)')
cursor.execute('insert into product (id, name, type, price) values (8, "裙子", "衣服", 60.0)')
cursor.execute('insert into product (id, name, type, price) values (9, "夹克", "衣服", 79.0)')
cursor.execute('insert into product (id, name, type, price) values (10, "短裤", "衣服", 39.9)')
# 方式 2
data = [(6, '盘子', '餐具', 89.0),
(7, '衬衫', '衣服', 69.0),
(8, '裙子', '衣服', 60.0),
(9, '夹克', '衣服', 79.0),
(10, '短裤', '衣服', 39.9)]
cursor.executemany('insert into product (id, name, type, price) values (%s, %s, %s, %s)', data)使用 excutemany() 方法时,不管字段是什么类型,占位符统一使用 %s。此外,对于 MySQL 增删查改的其他操作,小伙伴们可以参考一下 SQLite 的用法,具体请查看:Python 连接 SQLite。
注意: excutemany() 方法只适用于 pymysql 模块,而不能用于 sqlite3 模块。
