阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用MySQL

32次阅读
没有评论

共计 3393 个字符,预计需要花费 9 分钟才能阅读完成。

MySQL 是 Web 世界中使用最广泛的数据库服务器。SQLite 的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而 MySQL 是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于 SQLite。

此外,MySQL 内部有多种数据库引擎,最常用的引擎是支持数据库事务的 InnoDB。

安装 MySQL

可以直接从 MySQL 官方网站下载最新的 Community Server 8.x 版本。MySQL 是跨平台的,选择对应的平台下载安装文件,安装即可。

安装时,MySQL 会提示输入 root 用户的口令,请务必记清楚。如果怕记不住,就把口令设置为password

在 Windows 上,安装时请选择 UTF-8 编码,以便正确地处理中文。

在 Mac 或 Linux 上,需要编辑 MySQL 的配置文件,把数据库默认的编码全部改为 UTF-8。MySQL 的配置文件默认存放在 /etc/my.cnf 或者/etc/mysql/my.cnf

[client]
default-character-set = utf8mb4

[mysqld]
default-storage-engine = INNODB
character-set-server = utf8mb4
collation-server = utf8_general_ci

重启 MySQL 后,可以通过 MySQL 的客户端命令行检查编码:

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor...
...

mysql> show variables like '%char%';
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| character_set_client     | utf8mb4                              |
| character_set_connection | utf8mb4                              |
| character_set_database   | utf8mb4                              |
| character_set_filesystem | binary                               |
| character_set_results    | utf8mb4                              |
| character_set_server     | utf8mb4                              |
| character_set_system     | utf8mb3                              |
| character_sets_dir       | /usr/local/mysql-8.x/share/charsets/ |
+--------------------------+--------------------------------------+
8 rows in set (0.00 sec)

看到 utf8mb4 字样就表示编码设置正确。

注意

如果 MySQL 的版本 <5.5.3,则只能把编码设置为 utf8utf8mb4 支持最新的 Unicode 标准,可以显示 emoji 字符,但 utf8 无法显示 emoji 字符。

用 Docker 启动 MySQL

如果不想安装 MySQL,还可以以 Docker 的方式快速启动 MySQL。

首先安装 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=password:传入 root 用户口令的环境变量,密码是password
  • -p 3306:3306:在本机 3306 端口监听;
  • --name mysql-8.4:启动后容器的名称为mysql-8.4,可任意设置;
  • -v ./mysql-data:/var/lib/mysql:把当前目录 ./mysql-data 映射到容器目录/var/lib/mysql,此目录存放 MySQL 数据库文件,避免容器停止后数据丢失;
  • mysql:8.4:启动镜像名称为mysql:8.4
  • --mysql-native-password=ON:表示启用明文口令;
  • --character-set-server=utf8mb4:表示启用 utf8mb4 作为字符集;
  • --collation-server=utf8mb4_unicode_ci:表示启用 utf8mb4 作为排序规则。

运行命令后可看到如下输出:

2024-07-11 02:44:05+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.1-1.el9 started.
...
2024-07-11T02:44:16.874162Z 0 [System] [MY-015015] [Server] MySQL Server - start.
...
2024-07-11T02:44:17.120017Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-07-11T02:44:17.561242Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
...
2024-07-11T02:44:17.868691Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

看到最后一行 ready for connections 表示启动成功。

安装 MySQL 驱动

由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的 MySQL 驱动来连接到 MySQL 服务器。MySQL 官方提供了 mysql-connector-python 驱动:

$ pip install mysql-connector-python 

我们演示如何连接到 MySQL 服务器的 test 数据库:

# 导入 MySQL 驱动:
>>> import mysql.connector
# 注意把 password 设为你的 root 口令:
>>> conn = mysql.connector.connect(user='root', password='password', database='test')
>>> cursor = conn.cursor()
# 创建 user 表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
# 插入一行记录,注意 MySQL 的占位符是 %s:
>>> cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
>>> cursor.rowcount
1
# 提交事务:
>>> conn.commit()
>>> cursor.close()
# 运行查询:
>>> cursor = conn.cursor()
>>> cursor.execute('select * from user where id = %s', ('1',))
>>> values = cursor.fetchall()
>>> values
[('1', 'Michael')]
# 关闭 Cursor 和 Connection:
>>> cursor.close()
True
>>> conn.close()

由于 Python 的 DB-API 定义都是通用的,所以,操作 MySQL 的数据库代码和 SQLite 类似。

小结

  • 执行 INSERT 等操作后要调用 commit() 提交事务;
  • MySQL 的 SQL 占位符是%s

参考源码

do_mysql.py

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-07发表,共计3393字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中