小支同学的阿里云云数据库Clouder认证(3个入门级):云数据库RDS快速入门+SQL基础开发与应用+云原生数据库PolarDB 快速入门

前言

       在数据驱动业务的时代,高效管理与利用结构化数据已成为企业数字化转型的核心诉求。阿里云云数据库 Clouder 认证(入门级)聚焦 “云数据库 RDS 快速入门”“SQL 基础开发与应用”“云原生数据库 PolarDB 快速入门” 三大实战场景,为技术从业者构建从数据库部署、SQL 开发到云原生数据库应用的全链路能力体系。

       首个实验以云数据库 RDS 为载体,演示如何将 Excel 数据高效导入云端数据库,通过数据管理服务 DMS 完成表结构设计、数据查询及 ECS 连接操作,解锁关系型数据库的基础运维与数据处理能力。第二个实验深入 SQL 开发场景,结合 Python 环境搭建,实现数据库表创建、触发器配置、复杂查询及数据可视化分析,强化结构化数据处理的编程思维。第三个实验引入云原生数据库 PolarDB,探索其高效的数据导入、弹性扩展及云原生特性,展现新一代数据库在高并发、低延迟场景下的优势。

       对于数据库新手而言,这不仅是三次认证考试,更是一次从 “数据存储” 到 “数据开发” 的系统化启蒙:从 RDS 的传统数据库部署到 PolarDB 的云原生架构实践,从手动数据导入到自动化 SQL 脚本开发,每一步均贴合企业真实数据场景,助力掌握数据库选型、性能优化及云原生技术的核心逻辑。无论你是希望夯实数据库基础,还是探索云原生数据库创新应用,这一系列实验都将为你铺设从理论到实战的进阶之路。

(1)《云数据库Clouder认证:云数据库RDS快速入门》

考试时长 120分钟

考试简介

本考试是《云数据库Clouder认证:云数据库RDS快速入门》认证考试。

注意事项

1. 考试形式为实验考试
2. 点击下方开始考试后,需要在12小时内创建资源并完成考试,否则本次考试机会作废。
3. 创建资源后,实验考试操作实验为2小时,请在实验结束前完成操作,并点击右上交的交卷按钮

1. 选择实验资源

本实验支持实验资源体验、开通免费试用两种实验资源方式。

在实验开始前,请您选择其中一种实验资源,单击确认开启实验。

  • 本实验推荐选择开通免费试用,可以免费体验云产品资源。下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。

说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。

阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心

  • 如果您已经开通过免费试用,也可以选择公共资源体验,资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)。

说明:实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

2. 实验场景说明

场景描述

我们平时会将一些结构化的数据放在Excel表格中进行存储,但当数据量达到一定规模,在进行复杂的关联查询时,Excel运行起来就不太友好,这时我们可以选择将Excel中的数据导入到数据库中进行处理,以提高数据存取的效率。本次实验将带领您,把Excel的数据通过数据管理服务DMS(Data Management Service)导入到RDS MySQL数据库中。

实验流程

实验开始,需要创建一个RDS for MySQL的实例,再创建数据库和账号,通过DMS对该实例进行接管,DMS拥有MySQL客户端的功能,可以在SQL窗口进行创建存储Excel数据的表,然后通过DMS的数据导入功能将Excel表格数据导入RDS数据库中。最后,会带领大家操作ECS连接RDS实例,并通过命令行,做一些简单的增删改查的操作。

3. 创建RDS for MySQL实例

登录RDS控制台

本步骤将指导您如何使用实验室页面远程桌面功能,登陆阿里云数据库RDS控制台。

在实验室页面右侧,单击

图标,切换至无影浏览器。

打开浏览器会自动打开阿里云RAM用户登录页面。

说明:浏览器如果未自动打开阿里云RAM用户登录页面,可通过浏览器手动输入RAM用户登录URL: Alibaba Cloud - RAM User Logon

通过子用户名称和子用户密码完成RAM用户登录。

说明:您可以通过实验室左侧导航栏,点击云产品资源,即可获取子用户名称和子用户密码。

说明:控制台会提示相关教程,可点击跳过教程,继续执行下一步

点击浏览器阿里云控制台首页页面左上角

图标,搜索框输入"RDS",点击搜索结果中的云数据库RDS,进入RDS管理控制台。

说明:如下图所示,代表您已经进入RDS管理控制台。

创建RDS for MySQL实例

点击创建实例的按钮,进入实例创建页面。

进入实例创建页面后,进行创建实例。

选择对应的参数进行配置实例,参数选择如下所示:

说明:详细参数说明,请参考官方文档:快速创建RDS MySQL实例

  • 计费方式:计费方式选择 按量计费,按量计费可随时释放实例,停止计费;

  • 地域:选择 华东1(杭州);

  • 引擎:选择 MySQL8.0 版本;

  • 产品系列:选择 高可用版 ,高可用版本实例为一主一备架构,最高99.99%可用性;

  • 产品类型:选择倚天版。

  • 存储类型:选择 ESSD云盘PL1 ,ESSD云盘基于新一代分布式块存储架构,结合25GE网络和RDMA技术,为您提供单盘高达100万的随机读写能力和更低的单路时延能力;

  • 主节点可用区:选择 杭州可用区J ,如果界面上无该可用区,也可选择其他可用区;

  • 部署方案:选择 单可用区部署 ;

  • 规格:规格分类选择通用规格,实例的规格推荐选择mysql.n2m.medium.2c,该规格为2C的CPU,4G内存;

存储空间:选择20G 。

点击下一步:实例配置 。

实例配置页面,在实例描述框中填写rdstest ,其他配置按照默认即可。

直接点击下一步:确认订单进入下一步操作。

确认订单页面,选择去支付。

出现该界面,表示已创建完成,可继续其他步骤。

4. 创建账号和数据库

进入RDS实例详情页。

登录RDS实例管理界面。

https://rdsnext.console.aliyun.com/rdsList/cn-hangzhou/basic

在RDS控制台界面选择上述步骤已创建好的实例。实例创建过程耗时3分钟左右,若实例ID暂不可跳转,请耐心等待,过程中可以刷新页面,等待实例状态变为运行中,单击实例ID 。

下图即为实例的管理界面。

创建账号

在账号管理界面,单击创建账号,创建 高权限账号,账号为aliyuntest,密码为实验提供的子账户密码。

子账户密码如下显示:

参数说明。

数据库账号:输入数据库账号名称aliyuntest。切记一定要设置账户名为aliyuntest,为了后续实验进行评分。

账号类型:选择高权限账号。

密码:设置账号密码。切记一定要设置为子用户密码,为了后续实验进行评分。

确认密码:再次输入密码。

备注:商品管理账户。

账号类型

说明

高权限账号

只能通过控制台或API创建和管理。

一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。

开放了更多权限,可满足个性化和精细化的权限管理需求,例如可按用户分配不同表的查询权限。

拥有实例下所有数据库的权限。

可以断开任意账号的连接。

普通账号

可以通过控制台、API或者SQL语句创建和管理。

一个实例可以创建多个普通账号,具体的数量与实例内核有关。

普通账号默认仅拥有登录数据库的权限,您需要手动给普通账号授予其他特定的权限。更多信息,请参见修改账号权限

普通账号不能创建和管理其他账号,也不能断开其他账号的连接。

显示账号已激活 ,账号已创建完成。若一直处于创建中,请手动刷新页面。

创建数据库

点击数据库管理,在点击创建数据库,在页面中输入数据库(DB)名称,选择支持字符集 ,并书写对应的备注说明,点击创建按钮,进行提交。

该示例创建数据库名称为:commodity

支持的字符集为:utf8mb4

备注说明:商品管理库

MySQL8.0支持多种字符集,字符集的特点如下:

utf8mb4:支持4字节Unicode字符,可以表示大部分国家的字符,是现代web应用中广泛使用的字符集。

utf8:只支持3字节Unicode字符,较老的MySQL服务器和许多库如LAMP(Linux + Apache + MySQL + Python/PHP/Perl)默认采用该字符集。

latin1:最基本的字符集,其它的字符集都可以通过该字符集的不可改变子集表示。这个字符集支持大部分计算机常见的字符,包括所有西欧语言的字母、数字、标点符号以及一些特殊字符。它在日语、中文和俄语等非拉丁字母语言中不适用。

gb2312:早期中国字符集,支持除异体字之外的3500左右的中文汉字和基本的拉丁字母、数字、标点符号,以及一些特殊字符。

gbk:统一汉字编码,是中国的现代字符集,包含了中国国家标准GB 2312-1980的全部字符,支持包括繁体字、日本汉字和韩国汉字等在内的多种汉字。

utf16:Unicode字符二进制编码的16位配对码,支持几乎所有语言的字符和符号。

总之,选择什么字符集要根据自己的实际情况进行综合考虑,例如需要支持哪些语言、字符等。utf8mb4通常是最好的选择,如果面临扩展部署考虑,则可考虑 utf16的使用,中文网站中,唯一建议不使用latin字符集。

显示如下界面,表示数据库已创建完成。

设置白名单

在左侧导航栏中,单击白名单与安全组。

单击default分组右侧的修改。

说明:如有需要,也可以单击添加白名单分组,并自定义一个分组名称。

全部开放:将0.0.0.0/0加入白名单中,点击确定。

白名单说明:

  • 多个IP地址用英文逗号隔开,且逗号前后不能有空格。

  • 单个实例最多添加1000个IP地址或IP段。如果IP地址较多,建议将零散的IP合并为IP段,例如10.10.10.0/24。

  • 如果第3步获取的白名单模式是通用模式,则无额外注意事项。如果是高安全模式,需注意:

    • 把公网IP或经典网络ECS实例私网IP添加至经典网络分组。

    • 把专有网络ECS实例私网IP添加至专有网络分组。

添加后,所有的应用服务器都能访问RDS实例。

5. 连接数据库

连接数据库

  • 在实例基本信息页面上单击 登录数据库 ,跳转DMS界面。

  • 在DMS界面,输入创建的 数据库账号 、 数据库密码。

  • 完成以上信息填写后,单击左下角的测试链接,测试连通性无问题后,点击 登录。

说明 如果测试连接失败,请按照报错提示检查您录入的实例信息。

  • 出现连接成功提示后,单击提交。

  • 连接成功后,点击 跳过,直接使用

6. 上传Excel表格数据到RDS数据库

执行SQL窗口

在DMS控制台,单击 首页,点击常用功能,选择SQL窗口,进入SQL执行窗口。

若出现以下界面,请缩小界面,点击 右上角 关掉广告页面,关掉操作指引。

进入SQL窗口后,选择commodity数据库进行连接,点击确认

点击 我已知晓,不在提示,进入SQL窗口。

执行SQL

将以下SQL复制到SQL窗口,创建goods表,用于存储Excel表格中的数据。

说明:表的名字可自定义,使用数据库的流程是先创建出数据库,然后创建表,最后在往表中插入数据,关于表的相关操作,可参考数据库cloud认证第二阶段,SQL基础开发与应用。

CREATE TABLE `goods` (
  `id` bigint(20) NOT NULL COMMENT '书籍编号',
  `name` varchar(32) NOT NULL COMMENT '书籍名称',
  `price` decimal(10,0) NOT NULL COMMENT '单价',
  `stock` int(10) unsigned NOT NULL COMMENT '库存',
  `author` varchar(128) DEFAULT NULL COMMENT '作者',
  `publishing_house` varchar(32) DEFAULT NULL COMMENT '出版社',
  `publishing_date` date DEFAULT NULL COMMENT '出版日期',
  `type` varchar(16) DEFAULT NULL COMMENT '类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品信息';

单击执行 ,页面返回执行成功标志,消息通知执行成功。

可点击

 刷新按钮,将会出现新创建的goods表。

数据导入

下载数据。

将已准备好的Excel表格数据,通过OSS的bucket地址粘贴至浏览器中进行下载。

https://clouder-labfileapp.oss-cn-hangzhou.aliyuncs.com/database/%E5%95%86%E5%93%81%E7%AE%A1%E7%90%86%20.xlsx

数据导入。在DMS控制台上,选择常用功能--->数据导入。

数据库:选择创建数据库步骤中所创建的数据库commodity;

文件类型:选择Excel格式;

目标表:选择创建的表goods;

数据位置:选择第1行为数据;

说明:

第1行为属性:表格首行是字段名。

第1行为数据:表格首行是数据。

单击上传文件,将商品管理文件进行上传。

单击提交申请。

预检查阶段,需显示全部通过,单击执行变更。

单击确定执行。

界面显示执行成功,即为文件上传成功。

至此,已经完成了Excel表格数据上传到RDS数据库的操作,接下来,让我们一起在数据库中查询数据。

7. 查询导入RDS数据库中的数据

单击SQL窗口,选择数据库,单击确认,进行连接数据库。

打开新的SQL窗口。

SQL窗口中,输入SQL,单击执行,查询goods表中的全量数据。

select * FROM `goods`;

查询出的数据为全量的数据,与Excel表格中的数据进行对比,可发现数据一致。

SQL窗口中,点击+号,新增SQL执行窗口,输入SQL,单击执行,在goods表中查询type字段为‘计算机’类型的数据。

select * FROM `goods` WHERE type='计算机';

8. ECS连接数据库操作

数据库连接串准备

通过ECS连接数据库,需要输入MySQL的命令行进行连接,连接方式如下:

说明:

  • mysql -h 主机名 -u 用户名 -p 密码 -P 端口 。

  • -h : 该命令用于指定客户端所要登录的MySQL主机名。

  • -u : 所要登录的用户名。

  • -p : 告诉服务器将会使用一个密码来登录。

  • -P:一般默认为3306。

在进行下面的实验之前,需要找到数据库的连接地址、账户和密码。

开通外网地址,点击实例功能栏左侧数据库连接,点击开通外网地址。

说明:

  • 外网地址需要手动申请,不需要时也可以释放。

  • 无法通过内网访问RDS实例时,您需要申请外网地址。具体场景如下:

    • ECS实例访问RDS实例,且ECS实例与RDS实例位于不同地域,或者网络类型不同。

    • 阿里云以外的设备访问RDS实例。

开通外网地址以后,将外网地址进行复制,后续步骤会进行使用该地址。

说明:在页面上显示外网地址,即为开通成功,一般需要等待1分钟,刷新页面即可看到。

ECS服务器登录数据库

在实验室页面右侧,单击单击

 图标,切换至Web Terminal。

执行如下命令,登录数据库。

mysql -h rm-bp1gnkhyazncgwof78o.mysql.rds.aliyuncs.com -P3306 -u aliyuntest -p 

说明:

需要将命令行中的rm-bp1gnkhyazncgwof78o.mysql.rds.aliyuncs.com地址替换为上述步骤查找到的外网地址,其他的参数无需更改

外网地址:跳回浏览器界面,进入数据库链接,获取外网地址。

数据库账户为之前步骤中所创建的数据库账号:aliyuntest

数据库密码为之前步骤中所创建的密码:子用户密码

返回结果如下,表示登录成功。

执行SQL操作

执行如下SQL语句,查看所有数据库。

show databases;

返回结果如下,您可查看到MySQL数据库中的数据库,其中commodity数据库是之前创建数据库的步骤中创建好的,后续实验所有操作都在commodity数据库中执行。

执行如下SQL语句,选择数据库commodity。

use commodity;

执行如下SQL语句,查看所有的表。

show tables;

执行如下SQL语句,查询goods表中所有数据。

select * from goods;

goods表中的数据为通过DMS导入的Excel表格中的数据。

执行如下SQL语句,创建一个名为book_types的表。

CREATE TABLE IF NOT EXISTS `book_types` (
  `type_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '书籍类型ID',
  `book_type` varchar(32) NOT NULL DEFAULT '' COMMENT '书籍类型',
  PRIMARY KEY (`type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

执行如下SQL语句,在book_types表中插入数据。

INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (1, '计算机');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (2, '历史');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (3, '小说');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (4, '科幻');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (5, '随笔');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (6, '心理学');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (7, '科学');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (8, '传记');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (9, '励志');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (10, '悬疑');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (11, '哲学');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (12, '语言学');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (13, '人工智能');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (14, '数据分析');
INSERT INTO `book_types` (`type_id`, `book_type`) VALUES (15, '数据挖掘');

执行如下SQL语句,查询book_types表中的所有数据。

select * from book_types;

执行如下SQL语句,删除book_types表中type_id等于1的数据,并进行查看。

delete from book_types where type_id=1;
select * from book_types;

执行如下SQL语句,更新book_types表中type_id为2数据book_type为python,并进行查看。

update book_types set book_type='python' where type_id=2;
select * from book_types;

至此您已经学会了通过ECS连接数据库的简单操作,赶快实践起来吧!

(2)《云数据库Clouder认证:SQL基础开发与应用》

考试时长 120分钟

考试简介

本考试是《云数据库Clouder认证:SQL基础开发与应用》认证考试。

注意事项

1. 考试形式为实验考试
2. 点击下方开始考试后,需要在12小时内创建资源并完成考试,否则本次考试机会作废。
3. 创建资源后,实验考试操作实验为2小时,请在实验结束前完成操作,并点击右上交的交卷按钮

1. 创建实验资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源。

  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息。

2. 登录子账号

(可选)在最右侧的工具栏中单击

图标,切换至无影安全浏览器。若未直接进入登录页面,可点击左侧一键复制子账号登录链接至浏览器中。

在最右侧的工具栏中单击

图标,切换至无影安全浏览器。

在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录,即可完成实验用户登录并进行接下来的实验操作。

在启动MFA设备,选择手机短信验证,单击确认。​

输入手机号获取验证码。​

输入验证码后,单击确定。​

3. Python环境搭建

实验资源创建完毕后的界面如图所示,在实验室页面右侧,单击单击

 图标,切换至Web Terminal。

执行如下命令,使用yum install命令安装Python的依赖包。

说明:Yum(Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装 。

yum install -y libffi-devel wget gcc make zlib-devel openssl openssl-devel ncurses-devel openldap-devel gettext bzip2-devel xz-devel sqlite*

返回结果如下 Complete,即为安装成功。

下载Python安装包,显示100%即为下载成功。

说明:wget 是Linux系统用于从Web下载文件的命令行工具。wget加上需要下载文件的链接,即可完成文件的下载。

wget 'https://clouder-labfileapp.oss-cn-hangzhou.aliyuncs.com/database/Python-3.9.10.tar.xz'

编译安装,请依次执行以下命令。

说明:源码编译安装,下载的是官网提供的源码包,需要进行编译和安装,在编译安装之前,需要安装编译的环境,不然在编译的时候会遇到各种error报错。也可以在编译安装的时候,指定参数进行编译安装。

# 解压安装包
tar -xvJf Python-3.9.10.tar.xz

# 进入安装包目录
cd Python-3.9.10

# 配置安装目录
./configure prefix=/usr/local/python3

# 编译,make工程管理器就是一个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少工作量,同时,他通过读入makefile文件的内容来执行大量编译工作。
make
#说明:此过程耗时较长,请您耐心等待。
#编译安装
make install

# 给Python和包管理器创建软连接
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3
ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3

执行以下命令,安装Python虚拟环境。

说明:虚拟环境(virtual environment),它是一个虚拟化,从系统独立开辟出来的环境。通俗地来讲,虚拟环境就是借助虚拟机来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。

#创建目录
mkdir -p /apps && cd $_

#创建虚拟环境
python3 -m venv venv

执行以下命令,应用Python虚拟环境。

# 通常情况下一个应用服务一个虚拟环境,每个虚拟环境可以安装不同版本的不同模块
source /apps/venv/bin/activate

执行以下命令,配置pip源。

说明:pip是Python中最重要的包管理工具之一,它可以让我们轻松地安装、升级和卸载包。然而默认情况下pip从官方源下载包,由于网络问题,这样的下载速度很慢,有时候包甚至无法下载。所以我们需要配置pip源来解决这个问题。

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set install.trusted-host mirrors.aliyun.com

执行以下命令,安装python模块。

pip install --upgrade pip
pip install pymysql sqlalchemy pandas matplotlib pyyaml 

执行以下命令,验证Python模块安装成功。

pip list

执行以下命令,验证Python安装成功。

python --version

执行以下命令,安装MySQL。

yum  install mysql -y

4. 创建RDS账户

登录RDS控制台

本步骤将指导您如何使用实验室页面远程桌面功能,登录阿里云数据库RDS控制台。

在实验室页面右侧,单击

图标,切换到无影安全浏览器。

 

点击桌面Chromium Web Browser图标,打开浏览器会自动打开阿里云RAM用户登录页面。

 

说明:浏览器如果未自动打开阿里云RAM用户登录页面,可通过浏览器手动输入RAM用户登录URL: Alibaba Cloud - RAM User Logon

 

通过子用户名称和子用户密码完成RAM用户登录。

说明:您可以通过实验室左侧导航栏,点击云产品资源,即可获取子用户名称和子用户密码。

 

说明:控制台会提示相关教程,可点击跳过教程,继续执行下一步。

点击浏览器阿里云控制台首页页面左上角

图标,搜索框输入"RDS",点击搜索结果中的云数据库RDS,进入RDS管理控制台。

 

 

说明:如下图所示,代表您已经进入RDS管理控制台。

 

登录RDS实例管理界面

在RDS控制台界面选择上述步骤已创建好的实例,单击实例ID。

 

下图即为实例的管理界面。

 

创建账号

在账号管理界面,单击创建账号,创建高权限账号 ,账号为aliyuntest,密码为实验提供的子账户密码。

  • 子账户密码如下显示:

参数说明:

  • 数据库账号:输入数据库账号名称aliyuntest。切记一定要设置账户名为aliyuntest,为了后续实验进行评分。

  • 账号类型:选择高权限账号。

  • 密码:设置账号密码,切记一定要设置为子用户密码,为了后续实验进行评分。

  • 确认密码:再次输入密码

  • 备注:商品管理账户

账号类型

说明

高权限账号

  • 只能通过控制台或API创建和管理。

  • 一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。

  • 开放了更多权限,可满足个性化和精细化的权限管理需求,例如可按用户分配不同表的查询权限。

  • 拥有实例下所有数据库的权限。

  • 可以断开任意账号的连接。

普通账号

  • 可以通过控制台、API或者SQL语句创建和管理。

  • 一个实例可以创建多个普通账号,具体的数量与实例内核有关。

  • 普通账号默认仅拥有登录数据库的权限,您需要手动给普通账号授予其他特定的权限。更多信息,请参见修改账号权限

  • 普通账号不能创建和管理其他账号,也不能断开其他账号的连接。

显示账号已激活,账号已创建完成。

5. 设置白名单并开通RDS外网地址

设置白名单

在左侧导航栏中,单击白名单与安全组。

单击default分组右侧的修改。

说明:如有需要,也可以单击添加白名单分组,并自定义一个分组名称。

全部开放:将 0.0.0.0/0 加入白名单中,点击确定。

白名单说明:

  • 多个IP地址用英文逗号隔开,且逗号前后不能有空格。

  • 单个实例最多添加1000个IP地址或IP段。如果IP地址较多,建议将零散的IP合并为IP段,例如10.10.10.0/24。

  • 如果第3步获取的白名单模式是通用模式,则无额外注意事项。如果是高安全模式,需注意:

  • 把公网IP或经典网络ECS实例私网IP添加至经典网络分组。

  • 把专有网络ECS实例私网IP添加至专有网络分组。

添加后,所有的应用服务器都能访问RDS实例。

开通RDS外网地址
  1. 开通外网地址,点击实例功能栏左侧数据库连接,点击开通外网地址。

说明:

  • 外网地址需要手动申请,不需要时也可以释放。

  • 无法通过内网访问RDS实例时,您需要申请外网地址。具体场景如下:

  • ECS实例访问RDS实例,且ECS实例与RDS实例位于不同地域,或者网络类型不同。

  • 阿里云以外的设备访问RDS实例。

2. 开通外网地址以后,将外网地址进行复制,后续步骤会进行使用该地址。

说明:在页面上显示外网地址,即为开通成功,一般需要等待1分钟,刷新页面即可看到

6. 在ECS上连接RDS实例创建数据库

  • 通过ECS连接数据库,需要输入MySQL的命令行进行连接,连接方式如下。

说明:

mysql -h 主机名 -u 用户名 -p 密码 -P 端口。

-h : 该命令用于指定客户端所要登录的MySQL主机名;

-u : 所要登录的用户名;

-p : 告诉服务器将会使用一个密码来登录;

-P:一般默认为3306。

  • 在进行下面的实验之前,需要找到数据库的连接地址、账户和密码。

  1. 数据库账户为之前步骤中所创建的数据库账号:aliyuntest。

  2. 数据库密码为之前步骤中所创建的密码:子用户密码(如下图所示)。

3.在实验室页面右侧,单击单击

 图标,切换至Web Terminal。

说明:

  • 如您选择的是公共资源,则会自动连接到实验室提供的云服务器ECS。

  • 如您选择的是试用资源/个人资源,需输入ECS登录的用户名和密码进行登录。

4. 执行如下命令,登录数据库

mysql -h xxxx.mysql.rds.aliyuncs.com -P3306 -u aliyuntest -p 

说明:

需要将xxxx.mysql.rds.aliyuncs.com地址替换为上述步骤查找到的外网地址,需要进行替换,其他的参数无需更改;

在Enter password中输入之前步骤设置的密码;

返回结果如下,表示登录成功。

在数据库中创建库
  1. 执行如下命令,创建数据库。

CREATE DATABASE IF NOT EXISTS `commodity` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

说明:返回结果为OK,即为创建成功。

7. 修改数据库账户密码配置文件

在MySQL命令行界面时,执行以下命令,退出MySQL命令行模式。

exit

说明:请注意,以下所有步骤的执行,都要在/apps目录下执行,若不在该目录,执行命令 cd /apps。

执行以下命令,通过OssBucket下载数据库yml文件。

wget 'https://clouder-labfileapp.oss-cn-hangzhou.aliyuncs.com/database/account.yml'

修改yaml文件中的连接串信息。

vim account.yml

按下i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

修改yml文件中的db_host、db_user、db_passwd的信息。

说明:db_host为创建的RDS实例的外网地址,db_user为创建的数据库账户,db_passwd为设置的账户密码。

完成修改后,先按Esc退出编辑,再输入:wq,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

8. 使用Python创建表

使用Python创建表

说明:该步骤使用Python脚本在RDS数据库中创建商品表。

进入Vim编辑器。

vim create_tables.py

按下 :键进入输入模式,输入以下内容。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

以下为Python脚本内容,请复制粘贴。

#!/apps/venv/bin/python
import pymysql
import yaml

def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password

book_types = """
CREATE TABLE IF NOT EXISTS `book_types` (`type_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '书籍类型ID',
  `book_type` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY(`type_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci COMMENT '书籍类型';
"""
books = """
CREATE TABLE IF NOT EXISTS `books` (`book_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '书籍ID',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '书籍名称',
  `price` decimal(10, 2) unsigned zerofill NOT NULL COMMENT '单价',
  `stock` int unsigned  NOT NULL DEFAULT 1000 COMMENT '库存量',
  `author` varchar(128) NOT NULL DEFAULT '' COMMENT '作家名称',
  `publishing_house` varchar(64) NOT NULL DEFAULT '' COMMENT '出版社',
  `publishing_date` date NOT NULL COMMENT '出版日期',
  `type_id` int unsigned NOT NULL COMMENT '书籍类型ID',
  PRIMARY KEY(`book_id`),
  KEY `fk_book_type_id` (`type_id`),
  CONSTRAINT `fk_book_type_id` FOREIGN KEY(`type_id`) REFERENCES `book_types` (`type_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci COMMENT = '书籍信息';
"""
users = """
CREATE TABLE IF NOT EXISTS `users` (
  `user_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `user_name` varchar(64) NOT NULL DEFAULT '' COMMENT '用户名称',
  `register_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户注册时间',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT '用户表';
"""
orders = """
CREATE TABLE IF NOT EXISTS `orders` (
  `order_id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
  `order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单时间',
  PRIMARY KEY (`order_id`),
  KEY `fk_user_id_idx` (`user_id`),
  CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT '订单表';
"""
order_items = """
CREATE TABLE IF NOT EXISTS `order_items` (
  `order_item_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '订单项目ID',
  `order_id` bigint unsigned NOT NULL COMMENT '订单ID',
  `book_id` bigint unsigned NOT NULL COMMENT '书籍ID',
  `quantity` int unsigned NOT NULL COMMENT '商品数量',
  PRIMARY KEY(`order_item_id`),
  KEY `fk_order_id` (`order_id`),
  KEY `fk_book_id` (`book_id`),
  CONSTRAINT `fk_book_id` FOREIGN KEY(`book_id`) REFERENCES `books` (`book_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_order_id` FOREIGN KEY(`order_id`) REFERENCES `orders` (`order_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci COMMENT = '订单项';
"""

tables_schema = [
    {'tbl_name': 'book_types', 'tbl_schema': book_types},
    {'tbl_name': 'books', 'tbl_schema': books},
    {'tbl_name': 'users', 'tbl_schema': users},
    {'tbl_name': 'orders', 'tbl_schema': orders},
    {'tbl_name': 'order_items', 'tbl_schema': order_items}
]


def create_table(tables_schema: list) -> None:
    for table_schema in tables_schema:
        tbl_name = table_schema['tbl_name']
        tbl_schema = table_schema['tbl_schema']
        try:
            cursor.execute(tbl_schema)
            print(f"创建{tbl_name}表成功")
        except Exception as e:
            print(f"创建{tbl_name}表失败", e)
        finally:
            conn.commit()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、创建表
    create_table(tables_schema)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

显示如下图所示,表示完成粘贴。

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

执行以下命令,运行Python脚本

source /apps/venv/bin/activate
python create_tables.py

返回结果如下:

9. 登录数据库,查看创建的表

执行如下命令,登录数据库。

mysql -h xxxx.mysql.rds.aliyuncs.com -P3306 -u aliyuntest -p 

说明:需要将xxxx.mysql.rds.aliyuncs.com地址替换为上述步骤创建的RDS的外网地址,需要进行替换,其他的参数无需更改;

在Enter password中输入之前步骤设置的密码;

执行如下命令,查看创建的表。

use commodity;
show tables;

10. 使用Python创建触发器并查看

说明:该步骤使用Python脚本在RDS数据库中创建触发器。

在MySQL命令行界面时,执行以下命令,退出MySQL命令行模式。

exit

进入Vim编辑器。

vim creat_triggers.py 

按下 :键进入输入模式,输入以下内容。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

以下为Python脚本内容,请复制粘贴。

#!/apps/venv/bin/python
import pymysql

import yaml

def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password

tg_insert_o = """
CREATE TRIGGER tg_insert_o
AFTER INSERT
ON order_items FOR EACH ROW
UPDATE `books` SET `stock`=`stock`- new.`quantity` WHERE `book_id`= new.`book_id`;
"""
tg_update_o = """
CREATE TRIGGER tg_update_o
AFTER UPDATE
ON order_items FOR EACH ROW
UPDATE `books` SET `stock`= old.`quantity`- new.`quantity`+`stock` WHERE `book_id`= old.`book_id`;
"""
tg_delete_o = """
CREATE TRIGGER tg_delete_o
AFTER DELETE
ON order_items FOR EACH ROW
UPDATE `books` SET `stock`=`stock`+ old.`quantity` WHERE `book_id`= old.`book_id`;
"""

triggers_schema = [
    {'tg_name': 'tg_insert_o', 'tg_schema': tg_insert_o},
    {'tg_name': 'tg_update_o', 'tg_schema': tg_update_o},
    {'tg_name': 'tg_delete_o', 'tg_schema': tg_delete_o}
]


def create_trigger(triggers_schema: list) -> None:
    for trigger_schema in triggers_schema:
        tg_name = trigger_schema['tg_name']
        tg_schema = trigger_schema['tg_schema']
        try:
            cursor.execute(tg_schema)
            print(f"创建触发器{tg_name}成功")
        except Exception as e:
            print(f"创建触发器{tg_name}表失败", e)
        finally:
            conn.commit()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、创建触发器
    create_trigger(triggers_schema)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

说明:显示如下图所示,表示完成粘贴。

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  creat_triggers.py  

返回结果如下:

登录数据库查看创建的触发器

执行如下命令,登录数据库。

mysql -h xxxx.mysql.rds.aliyuncs.com -P3306 -u aliyuntest -p 

说明:需要将xxxx.mysql.rds.aliyuncs.com地址替换为上述步骤创建的RDS的外网地址,需要进行替换,其他的参数无需更改;

在Enter password中输入之前步骤设置的密码;

执行如下命令,查看创建触发器。

use commodity;
show triggers\G

11. 使用python插入初始数据

说明:该步骤使用Python脚本在RDS数据库中插入数据。

在MySQL命令行界面时,执行以下命令,退出MySQL命令行模式。

exit

 

进入Vim编辑器。

 vim creat_insert.py 

按下 :键进入输入模式,输入以下内容。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

以下为Python脚本内容,请复制粘贴。

#!/apps/venv/bin/python
import pymysql

import yaml

def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password

book_types = [
    (1, '计算机'), (2, '历史'), (3, '小说'), (4, '科幻'), (5, '随笔'), (6, '心理学'), (7, '科学'), (8, '传记'), (9,'励志'), (10, '悬疑'), (11, '哲学'), (12, '语言学'), (13, '人工智能'), (14, '数据分析'), (15, '数据挖掘')
]
books = [
    (1, 'Python编程从入门到精通', 49.90, '张三', '图灵出版社', '2022-01-15', 1),
    (2, '数据结构与算法分析', 35.00, '李四', '清华大学出版社', '2021-09-30', 1),
    (3, '人类简史', 25.50, '尤瓦尔·赫拉利', '中信出版社', '2020-03-12', 2),
    (4, '活着', 18.00, '余华', '作家出版社', '2019-05-08', 3),
    (5, '白夜行', 22.50, '东野圭吾', '南海出版公司', '2021-11-20', 3),
    (6, 'Java编程思想', 59.00, 'Bruce Eckel', '机械工业出版社', '2020-07-10', 1),
    (7, '三体', 28.80, '刘慈欣', '重庆出版社', '2018-12-18', 4),
    (8, '围城', 15.50, '钱钟书', '人民文学出版社', '2017-10-22', 3),
    (9, 'JavaScript权威指南', 42.50, 'David Flanagan', '电子工业出版社', '2022-02-28', 1),
    (10, '活法', 19.00, '梁文道', '江苏文艺出版社', '2019-09-10', 5),
    (11, '思考,快与慢', 26.50, '丹尼尔·卡尼曼', '中信出版社', '2018-06-05', 6),
    (12, '时间简史', 32.00, '史蒂芬·霍金', '湖南科学技术出版社', '2017-11-15', 7),
    (13, 'C++ Primer Plus', 55.00, 'Stephen Prata', '电子工业出版社', '2021-08-20', 1),
    (14, '红楼梦', 24.50, '曹雪芹', '人民文学出版社', '2019-03-10', 3),
    (15, '西游记', 23.00, '吴承恩', '人民文学出版社', '2020-09-18', 3),
    (16, '乔布斯传', 38.00, '沃尔特·艾萨克森', '中信出版社', '2018-04-15', 8),
    (17, '高效能人士的七个习惯', 28.80, '史蒂芬·柯维', '华西出版社', '2019-07-22', 9),
    (18, '囚鸟', 20.00, '冯内古特', '上海译文出版社', '2020-12-08', 3),
    (19, 'C语言程序设计', 29.90, '谭浩强', '清华大学出版社', '2017-06-30', 1),
    (20, 'C++语言程序设计', 39.90, '谭浩强', '清华大学出版社', '2019-08-08', 1),
    (21, '哈利·波特与魔法石', 28.00, 'J.K.罗琳', '人民文学出版社', '2019-08-15', 3),
    (22, '一九八四', 24.90, '乔治·奥威尔', '新经典文化', '2020-05-20', 3),
    (23, 'C#图解教程', 35.00, '某某某', '某某出版社', '2021-12-01', 1),
    (24, '东方快车谋杀案', 19.90, '阿加莎·克里斯蒂', '外语教学与研究出版社', '2018-11-10', 10),
    (25, '思考的艺术', 32.50, '罗尔斯·邓南巴', '北京联合出版公司', '2020-07-25', 11),
    (26, '黑客与画家', 29.90, 'Paul Graham', '人民邮电出版社', '2019-04-05', 1),
    (27, '长夜难明', 26.80, '王小波', '作家出版社', '2017-12-15', 3),
    (28, 'JavaScript高级程序设计', 55.50, 'Nicholas C. Zakas', '人民邮电出版社', '2022-02-01', 1),
    (29, '月亮与六便士', 22.00, '毛姆', '译林出版社', '2018-08-12', 3),
    (30, '简爱', 18.50, '夏洛蒂·勃朗特', '人民文学出版社', '2019-01-20', 3),
    (31, 'React进阶实践', 38.00, '某某某', '某某出版社', '2021-07-10', 1),
    (32, '解忧杂货店', 21.50, '东野圭吾', '南海出版公司', '2019-12-08', 3),
    (33, 'Python数据科学手册', 49.50, 'Jake VanderPlas', '机械工业出版社', '2020-10-15', 1),
    (34, '追风筝的人', 25.80, '卡勒德·胡赛尼', '上海人民出版社', '2021-06-30', 3),
    (35, '深入理解计算机系统', 55.00, 'Randal E. Bryant / David R. O’Hallaron',
     '机械工业出版社', '2022-03-20', 1),
    (36, '白夜行', 22.50, '东野圭吾', '南海出版公司', '2021-11-20', 3),
    (37, 'JavaScript高级编程', 46.80, 'Zakas', '电子工业出版社', '2020-09-10', 1),
    (38, '百年孤独', 38.00, '加西亚·马尔克斯', '南海出版公司', '2019-05-12', 3),
    (39, '编程珠玑', 45.00, 'Jon Bentley', '人民邮电出版社', '2018-08-25', 1),
    (40, 'JavaScript权威指南', 42.50, 'David Flanagan', '电子工业出版社', '2022-02-28', 1),
    (41, '飘', 33.50, '玛格丽特·米切尔', '译林出版社', '2021-09-18', 3),
    (42, '计算机网络', 39.90, '谢希仁', '电子工业出版社', '2020-12-01', 1),
    (43, '偷影子的人', 24.80, '马克·李维', '南海出版公司', '2018-11-15', 3),
    (44, '深入理解现代英语', 29.50, '余光中', '北京大学出版社', '2021-03-10', 12),
    (45, 'C Primer Plus', 38.00, 'Stephen Prata', '人民邮电出版社', '2022-05-20', 1),
    (46, '挪威的森林', 27.00, '村上春树', '上海译文出版社', '2020-11-08', 3),
    (47, '计算机程序设计艺术', 65.00, '高德纳', '机械工业出版社', '2021-07-01', 1),
    (48, '活出生命的意义', 23.50, '维克多·弗兰克尔', '湖南科学技术出版社', '2019-09-22', 6),
    (49, '程序员的自我修养', 46.00, '俞甲子', '人民邮电出版社', '2022-01-15', 1),
    (50, '万历十五年', 28.90, '黄仁宇', '上海人民出版社', '2020-07-30', 2),
    (51, '高效能人士的思维模式', 25.00, '史蒂芬·柯维', '经济管理出版社', '2018-06-10', 9),
    (52, 'JavaScript权威指南', 42.50, 'David Flanagan', '电子工业出版社', '2022-02-28', 1),
    (53, '解忧杂货店', 21.50, '东野圭吾', '南海出版公司', '2019-12-08', 3),
    (54, 'Python数据科学手册', 49.50, 'Jake VanderPlas', '机械工业出版社', '2020-10-15', 1),
    (55, '追风筝的人', 25.80, '卡勒德·胡赛尼', '上海人民出版社', '2021-06-30', 3),
    (56, '深入理解计算机系统', 55.00, 'Randal E. Bryant / David R. O’Hallaron',
        '机械工业出版社', '2022-03-20', 1),
    (57, '白夜行', 22.50, '东野圭吾', '南海出版公司', '2021-11-20', 3),
    (58, 'JavaScript高级编程', 46.80, 'Zakas', '电子工业出版社', '2020-09-10', 1),
    (59, '百年孤独', 38.00, '加西亚·马尔克斯', '南海出版公司', '2019-05-12', 3),
    (60, 'Python深度学习', 36.50, '伊恩·古德费洛 / 布拉姆·鲁滨斯', '机械工业出版社', '2021-04-15', 13),
    (61, '机器学习实战', 42.80, '彼得·哈林顿 / 德里克·班汀利', '电子工业出版社', '2020-09-25', 13),
    (62, '深度学习', 55.50, '伊恩·古德费洛 / 哈罗德·埃尔南德斯 / 弗朗索瓦·肖莱', '人民邮电出版社', '2022-03-05', 13),
    (63, 'Python数据分析', 39.90, '麦可•梅勒 / 莫琳•凯利', '机械工业出版社', '2021-08-10', 14),
    (64, '机器学习', 45.80, 'Tom M. Mitchell', '清华大学出版社', '2020-11-20', 13),
    (65, '数据挖掘概念与技术', 56.50, 'Jiawei Han / Micheline Kamber / Jian Pei',
        '电子工业出版社', '2021-09-15', 15),
    (66, '计算机视觉', 49.50, 'Richard Szeliski', '机械工业出版社', '2022-02-28', 13),
    (67, '深度学习之PyTorch', 36.00, 'I. Antiga / L. E. G. Ortiz / E. Conti / E. L. Denton',
     '机械工业出版社', '2021-07-10', 13),
    (68, '神经网络与深度学习', 28.90, 'Michael Nielsen', '人民邮电出版社', '2020-03-30', 13),
    (69, '自然语言处理', 42.00, 'Jacob Eisenstein / Emily Bender / Noah A. Smith / Yejin Choi',
     '清华大学出版社', '2021-12-01', 13),
    (70, '动手学深度学习', 49.90, '李沐 / 阿斯顿·张 / 云开发团队', '电子工业出版社', '2021-06-15', 13),
    (71, '统计学习方法', 38.50, '李航', '清华大学出版社', '2022-04-10', 13),
    (72, '深度学习入门', 32.80, '斋藤康毅', '人民邮电出版社', '2020-09-08', 13),
    (73, '模式识别与机器学习', 58.50, 'Christopher M. Bishop', '电子工业出版社', '2021-05-15', 13),
    (74, 'Python人工智能开发实战', 35.90, '陆运坤', '机械工业出版社', '2020-11-20', 13),
    (75, '计算机视觉:算法与应用', 49.00, 'Richard Szeliski', '机械工业出版社', '2022-01-30', 13),
    (76, '神经网络与深度学习', 29.90, 'Michael Nielsen', '人民邮电出版社', '2021-08-10', 13),
    (77, '机器学习实战', 42.80, '彼得·哈林顿 / 德里克·班汀利', '电子工业出版社', '2020-09-25', 13),
    (78, '自然语言处理入门', 36.00, '黄峰达 / 陈俊廷', '电子工业出版社', '2021-11-10', 13),
    (79, '图解深度学习', 45.50, '中山恭平', '机械工业出版社', '2021-02-20', 13),
    (80, '机器学习:算法、理论与应用', 56.90, '周志华', '清华大学出版社', '2022-03-25', 13),
    (81, 'Python深度学习', 36.50, '伊恩·古德费洛 / 布拉姆·鲁滨斯', '机械工业出版社', '2021-04-15', 13),
    (82, '强化学习导论', 33.50, 'Richard S. Sutton / Andrew G. Barto',
     '电子工业出版社', '2020-12-08', 13),
    (83, '模式识别', 48.00, '贺涛 / 刘洪波', '电子工业出版社', '2022-05-30', 13),
    (84, 'TensorFlow实战', 32.50, '黄文坚 / 唐源 / 宋亚轩', '人民邮电出版社', '2021-03-12', 13),
    (85, '数据挖掘导论', 55.00, 'Pang-Ning Tan / Michael Steinbach / Vipin Kumar',
     '机械工业出版社', '2022-02-15', 15),
    (86, 'Python网络神经', 38.90, '伊恩·古德费洛 / 布拉姆·鲁滨斯', '机械工业出版社', '2021-09-10', 13),
    (87, '机器学习:实用案例解析', 29.80, 'Drew Conway / John Myles White',
     '清华大学出版社', '2020-07-25', 13),
    (88, '深度学习之TensorFlow:入门、原理与应用', 42.00,
     '李岳 / 熊云飞 / 刘鹏', '人民邮电出版社', '2021-12-30', 13),
    (89, '机器学习实战', 39.90, '彼得·哈林顿 / 德里克·班汀利', '电子工业出版社', '2021-01-15', 13),
    (90, '人类简史', 33.80, '尤瓦尔·赫拉利', '中信出版社', '2021-09-15', 2),
    (91, '明朝那些事儿', 28.50, '当年明月', '湖南文艺出版社', '2020-07-08', 2),
    (92, '百年孤独', 38.00, '加西亚·马尔克斯', '南海出版公司', '2019-05-12', 3),
    (93, '明朝那些事儿', 32.00, '当年明月', '湖南文艺出版社', '2020-11-25', 2),
    (94, '文明的冲突', 29.50, '塞缪尔·P·亨廷顿', '中信出版社', '2020-09-20', 2),
    (95, '人类群星闪耀时', 34.90, '史蒂夫·约翰逊', '中信出版社', '2021-04-10', 2),
    (96, '大秦帝国', 31.80, '孙皓晖', '中信出版社', '2020-12-15', 2),
    (97, '慢读中国史', 27.50, '吕思勉', '湖南人民出版社', '2019-11-08', 2),
    (98, '世界通史', 55.50, '吕思勉', '中国青年出版社', '2022-03-25', 2),
    (99, '万历十五年', 32.90, '黄仁宇', '上海人民出版社', '2021-08-12', 2),
    (100, '今日简史', 32.30, '尤瓦尔·赫拉利', '中信出版社', '2021-08-12', 2),
]


def insert_data(tbl_name: str, columns: list, data: list) -> None:
    column = ','.join([f'`{col}`' for col in columns])
    value = ','.join(['%s' for _ in range(len(columns))])
    try:
        cursor.execute("SET FOREIGN_KEY_CHECKS = 0")
        cursor.execute(f"TRUNCATE TABLE {tbl_name}")
        cursor.execute("SET FOREIGN_KEY_CHECKS = 1")
        effect_row = cursor.executemany(
            f"INSERT INTO `{tbl_name}` ({column}) VALUES ({value})", data)
        print(f"{tbl_name}表成功插入{effect_row}行数据")

    except Exception as e:
        print(f"{tbl_name}表插入数据失败", e)
    finally:
        conn.commit()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、插入数据
    # 3.1、插入书籍类型数据
    insert_data('book_types', ['type_id', 'book_type'], book_types)
    # 3.2、插入书籍信息数据
    insert_data('books', ['book_id', 'name', 'price', 'author',
                'publishing_house', 'publishing_date', 'type_id'], books)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  creat_insert.py  

返回结果如下。

 

执行如下命令,登录数据库。

mysql -h xxxx.mysql.rds.aliyuncs.com -P3306 -u aliyuntest -p 

说明:需要将xxxx.mysql.rds.aliyuncs.com地址替换为上述步骤创建的RDS的外网地址,需要进行替换,其他的参数无需更改;

在Enter password中输入之前步骤设置的密码;

 

执行如下命令,查看插入的数据。(观察到所有书籍库存是1000)

use commodity;
SELECT bt.book_type,
       b.name,
       b.author,
       b.stock
  FROM books b
  LEFT JOIN book_types bt ON b.type_id= bt.type_id;

 

12. 使用python对表及表数据进行增删改查

使用python插入数据

在MySQL命令行界面时,执行以下命令,退出MySQL命令行模式。

exit

 

进入Vim编辑器。

vim insert_data.py

按下 :键进入输入模式,输入以下内容 。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

以下为Python脚本内容,请复制粘贴。

#!/apps/venv/bin/python
import pymysql
import yaml
def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password

users = [
    (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'), (4, 'David'), (5, 'Eve'), (6, 'Fiona'), (7, 'George'), (8, 'Hannah'), (9,
                                                                                                                     'Isaac'), (10, 'Jessica'), (11, 'Kevin'), (12, 'Linda'), (13, 'Michael'), (14, 'Natalie'), (15, 'Oliver')

]
orders = [
    (2), (1), (3), (3), (4), (7), (8), (10), (12), (15), (7), (2), (6)
]
order_items = [
    (1, 3, 1), (1, 7, 8), (1, 8, 2), (2, 3, 5), (2, 1, 8), (3, 99, 2), (4, 23, 1), (5, 7, 8), (6, 23, 2), (7,
                                                                                                           13, 2), (8, 13, 1), (9, 57, 8), (10, 68, 3), (11, 38, 2), (12, 88, 7), (13, 3, 1), (4, 17, 8), (7, 78, 1)
]


def insert_data(tbl_name: str, columns: list, data: list) -> None:
    column = ','.join([f'`{col}`' for col in columns])
    value = ','.join(['%s' for _ in range(len(columns))])
    try:
        cursor.execute("SET FOREIGN_KEY_CHECKS = 0")
        cursor.execute(f"TRUNCATE TABLE {tbl_name}")
        cursor.execute("SET FOREIGN_KEY_CHECKS = 1")
        effect_row = cursor.executemany(
            f"INSERT INTO `{tbl_name}` ({column}) VALUES ({value})", data)
        print(f"{tbl_name}表成功插入{effect_row}行数据")

    except Exception as e:
        print(f"{tbl_name}表插入数据失败", e)
    finally:
        conn.commit()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、新增数据
    # 3.1、新增用户数据
    insert_data('users', ['user_id', 'user_name'], users)
    # 3.2、新增订单数据
    insert_data('orders', ['user_id'], orders)
    # 3.3、新增订单项数据
    insert_data('order_items', ['order_id',
                'book_id', 'quantity'], order_items)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  insert_data.py  

返回结果如下。

 

使用Python查找数据(注意对比库存数量变化,以及用户购买的书籍)

说明:该步骤使用Python脚本在RDS数据库中查找数据。

进入Vim编辑器。

vim select_data.py 

按下 :键进入输入模式,输入以下内容

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

 

以下为Python脚本内容,请复制粘贴。

# !/apps/venv/bin/python
import pymysql

import yaml
def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password
  
def sql_read(sql_info: str) -> ():
    try:
        cursor.execute(sql_info)
        print(cursor.fetchall())
    except Exception as e:
        print(f"SQL执行失败", e)


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")
    # 2、创建游标
    cursor = conn.cursor()

    # 3、查询订单信息
    sql_order_item_id = """
    SELECT bt.book_type,
           b.`name`,
           b.author,
           b.`stock` AS '库存',
           u.user_name,
           oi.quantity AS '购买数量'
     FROM orders o
      LEFT JOIN users u ON o.user_id= u.user_id
      LEFT JOIN order_items oi ON o.order_id= oi.order_id
      LEFT JOIN books b ON oi.book_id= b.book_id
      LEFT JOIN book_types bt ON b.type_id= bt.type_id;
    """
    sql_read(sql_order_item_id)
 

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  select_data.py 

 

使用Python更新数据

说明:该步骤使用Python脚本在RDS数据库中更新数据。

进入Vim编辑器。

vim update_data.py

按下 :键进入输入模式,输入以下内容 。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

 

以下为Python脚本内容,请复制粘贴。

# !/apps/venv/bin/python
import pymysql

import yaml

def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password
def sql_write(sql_info: str) -> None:
    try:
        cursor.execute(sql_info)
        print("SQL执行成功")
    except Exception as e:
        print(f"SQL执行失败", e)
    finally:
        conn.commit()


def sql_read(sql_info: str) -> ():
    try:
        cursor.execute(sql_info)
        return cursor.fetchall()
    except Exception as e:
        print(f"SQL执行失败", e)


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、Bob将自己的订单《三体》都改为5本
    sql_order_item_id = """
    SELECT oi.`order_item_id`
      FROM orders o
      LEFT JOIN users u ON o.user_id= u.user_id
      LEFT JOIN order_items oi ON o.order_id= oi.order_id
      LEFT JOIN books b ON oi.book_id= b.book_id
     WHERE b.name= '三体'
       AND u.`user_name`= 'Bob'
    """
    # Bob购买《三体》的订单项ID
    order_item_ids = ','.join([str(j) for i in sql_read(sql_order_item_id) for j in i])

    sql = f"""
    UPDATE `order_items`
       SET `quantity`= 5
     WHERE `order_item_id` IN ({order_item_ids})
    """
    sql_write(sql)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  update_data.py

 

使用Python删除数据

说明:该步骤使用Python脚本在RDS数据库中删除数据。

进入Vim编辑器。

vim delete.py

按下 :键进入输入模式,输入以下内容 。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

 

以下为Python脚本内容,请复制粘贴。

# !/apps/venv/bin/python
import pymysql
import yaml


def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password


def sql_write(sql_info: str) -> None:
    try:
        cursor.execute(sql_info)
        print("SQL执行成功")
    except Exception as e:
        print(f"SQL执行失败", e)
    finally:
        conn.commit()


def sql_read(sql_info: str) -> ():
    try:
        cursor.execute(sql_info)
        return cursor.fetchall()
    except Exception as e:
        print(f"SQL执行失败", e)


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、Bob不买《围城》了
    sql_order_item_id = """
    SELECT oi.`order_item_id`
      FROM orders o
      LEFT JOIN users u ON o.user_id= u.user_id
      LEFT JOIN order_items oi ON o.order_id= oi.order_id
      LEFT JOIN books b ON oi.book_id= b.book_id
     WHERE b.name= '围城'
       AND u.`user_name`= 'Bob'
    """
    # Bob购买《围城》的订单项ID
    order_item_ids = ','.join([str(j) for i in sql_read(sql_order_item_id) for j in i])

    sql = f"DELETE FROM `order_items` WHERE `order_item_id` IN ({order_item_ids})"
    sql_write(sql)

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本

source /apps/venv/bin/activate
python  delete.py

 

使用Python删除表

说明:该步骤使用Python脚本在RDS数据库中删除表。

进入Vim编辑器。

vim delete_table.py

按下 :键进入输入模式,输入以下内容 。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制示例脚本内容,右键粘贴,在粘贴对话框中.

说明:复制示例脚本,进行粘贴。

 

以下为Python脚本内容,请复制粘贴。

#!/apps/venv/bin/python
import pymysql
import yaml


def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
        return host, username, password

def drop_table(tbl_name: str) -> None:
    try:
        cursor.execute(f"DROP TABLE IF EXISTS {tbl_name}")
        print(f"删除{tbl_name}表成功")
    except Exception as e:
        print(f"删除{tbl_name}表失败", e)
    finally:
        conn.commit()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    conn = pymysql.connect(host=db_host, port=3306, user=db_user,
                           passwd=db_passwd, db='commodity', charset="utf8")

    # 2、创建游标
    cursor = conn.cursor()

    # 3、删除表
    drop_table('tbl_test')

    # 4、关闭游标
    cursor.close()

    # 5、关闭连接
    conn.close()

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本

source /apps/venv/bin/activate
python  delete_table.py

 

13. 搭建nginx环境

执行以下命令,安装nginx。

yum install -y nginx

执行以下命令,启动nginx服务。

systemctl start nginx
systemctl status nginx

14. 安装系统中文字体库

说明:该步骤是安装Linux系统的中文字体库,以便执行Python脚本生成分析图片时可以显示中文字体。

执行以下命令,下载中文字体库。

wget 'https://clouder-labfileapp.oss-cn-hangzhou.aliyuncs.com/database/simsun.tar.gz'

执行以下命令,安装字体库。

yum install fontconfig -y 

执行以下命令,安装更新字体命令。

yum install mkfontscale -y

执行以下命令,添加中文字体。

# 新建目录
mkdir /usr/share/fonts/chinese
#解压中文字体包
tar -xzf simsun.tar.gz 
#移动中文字体文件
mv simsun/* /usr/share/fonts/chinese
# 更改目录权限
chmod -R 755 /usr/share/fonts/chinese/

执行以下命令,重新建立字体索引&更新缓存。

# 创建可扩展字体文件的索引
mkfontscale
# 创建字体文件的索引
mkfontdir
# 创建字体信息缓存文件
fc-cache

执行以下命令,查看字体是否安装成功。

# 查看所有字体列表
fc-list
# 查看中文字体命令及执行结果
fc-list :lang=zh

 

15. 使用Python进行连接数据库分析销售生成图片

说明:该步骤使用Python脚本在RDS数据库中分析每类书销量大于10(且作者不是某某某)的书籍销售情况,并以图表形式展示。

进入Vim编辑器。

vim data_analysis.py

按下 :键进入输入模式,输入以下内容 。

set paste

输入上面命令以后,按下回车,再按i键进入编辑模式,vim编辑器左下方看到--INSERT--字样,即表明已经进入编辑模式。

复制下述脚本内容,右键粘贴,在粘贴对话框中。

说明:复制示例脚本,进行粘贴。

以下为Python脚本内容,请复制粘贴。

# !/apps/venv/bin/python
import yaml
import pandas as pd
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager


# -------- 开始
# 检查是否包含雅黑、黑体、仿宋、宋体
font_path = font_manager.findSystemFonts(fontpaths=None, fontext='ttf')
font_path = [f for f in font_path if any(font_name in f.lower() for font_name in ['msyh', 'simhei', 'heiti', 'simsun'])]

if font_path:
    plt.rcParams['font.sans-serif'] = font_manager.FontProperties(fname=font_path[0]).get_name()
# -------- 结束


def config() -> [str, str, str]:
    with open('/apps/account.yml', 'r') as f:
        conf = yaml.load(f, Loader=yaml.FullLoader)
        host = conf['database']['host']
        username = conf['database']['username']
        password = conf['database']['password']
    return host, username, password
      

def func_book_type_quantity(sql_info, engine):
    conn = engine.connect()
    try:
        df = pd.read_sql(sql_info, conn)

        # 每种书的销量
        book_type_quantity = df.groupby('book_type')['quantity'].sum()

        # 准备绘图数据
        df = pd.DataFrame(book_type_quantity)
        df.plot.bar(rot=0)  # rot设置轴标签旋转度数

        # 设置标题和标签
        plt.title('每类书的销量')
        plt.xlabel('类别')
        plt.ylabel('销量')

        # 调整 y 轴刻度范围
        plt.ylim(0, 35)

        # 保存图片
        plt.savefig('/usr/share/nginx/html/booktype_quantity.png')


    except Exception as e:
        raise Exception("读取数据时发生错误:" + str(e))
    finally:
        conn.close()


if __name__ == "__main__":
    # 1、创建连接
    db_host, db_user, db_passwd = config()
    ms_engine = create_engine(f"mysql+pymysql://{db_user}:{db_passwd}@{db_host}:3306/commodity")

    # 2、每类书销量大于10作者不是某某某的书籍销售情况
    sql = """
    SELECT bt.book_type,
           b.`name`,
           b.author,
           b.publishing_house,
           u.user_name,
           oi.quantity
      FROM orders o
      LEFT JOIN users u ON o.user_id= u.user_id
      LEFT JOIN order_items oi ON o.order_id= oi.order_id
      LEFT JOIN books b ON oi.book_id= b.book_id
      LEFT JOIN book_types bt ON b.type_id= bt.type_id
     WHERE b.type_id IN(
    SELECT b.type_id
      FROM order_items oi
      LEFT JOIN books b ON oi.book_id= b.book_id
     GROUP BY b.type_id
    HAVING SUM(oi.quantity)> 10)
       AND b.`author`<> '某某某'
     ORDER BY b.type_id DESC
    """

    # 3、计算每类书的销量
    func_book_type_quantity(sql, ms_engine)

粘贴后,会显示确认粘贴对话框,点击确认完成粘贴。

 

显示如下图所示,表示完成粘贴。

 

添加完成后按下Esc键退出vim编辑模式,即vim编辑器左下方--INSERT--字样消失。

最后输入:wq后,vim编辑器左下方看到:wq字样,按下Enter键,保存并退出Vim编辑器。

 

执行以下命令,运行Python脚本。

source /apps/venv/bin/activate
python  data_analysis.py

16. 登录网页查看生产内容

点击实验室右侧,单击

图标,切换到无影安全浏览器。

在浏览器中点击 ➕ ,输入网址以下网址,即可打开所生产的内容。

http://ip/booktype_quantity.png

说明:需要将网址中的ip进行替换,替换成ECS的公网地址。

出现以下页面,即为实验成功完成!

(3)《云原生数据库Clouder认证:云原生数据库PolarDB 快速入门》

考试时长 120分钟

考试简介

本考试是《云原生数据库Clouder认证:云原生数据库PolarDB 快速入门》认证考试。

注意事项

1. 考试形式为实验考试
2. 点击下方开始考试后,需要在12小时内创建资源并完成考试,否则本次考试机会作废。
3. 创建资源后,实验考试操作实验为2小时,请在实验结束前完成操作,并点击右上交的交卷按钮

1. 实验资源方式简介及开始实验

云起实验室支持实验资源体验、开通免费试用、个人账户资源三种实验资源方式。

在实验开始前,请您选择其中一种实验资源,单击确认开启实验。

  • 如果您选择的是实验资源体验,资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)。

说明:实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

  • 如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。

说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。

阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心

2. 登录子账号

(可选)在最右侧的工具栏中单击

图标,切换至无影安全浏览器。若未直接进入登录页面,可点击左侧一键复制子账号登录链接至浏览器中。

在最右侧的工具栏中单击

图标,切换至无影安全浏览器。

在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录,即可完成实验用户登录并进行接下来的实验操作。

在启动MFA设备,选择手机短信验证,单击确认。​

输入手机号获取验证码。​

输入验证码后,单击确定。​

3. 创建数据库账号

在阿里云控制台首页,单击左上角的

图标,在搜索框中输入云数据库PolarDB,单击搜索结果中的云数据库PolarDB,进入云数据库PolarDB控制台。

在左侧导航栏,单击集群列表。

在集群列表页面,切换地域所在地,找到实验室提供的PolarDB实例,单击实例ID。

说明:您可在云产品资源列表中查看实验室提供的PolarDB实例及地域。

在左侧导航栏,选择配置与管理>账号管理。

在账号管理界面,单击创建账号。

在创建账号面板,根据说明配置参数,然后单击确定。

参数说明:

  • 数据库账号:输入数据库账号名称aliyuntest。切记一定要设置账户名为aliyuntest,为了后续实验进行评分。

  • 账号类型:选择高权限账号。

  • 密码:设置账号密码,切记一定要设置为子用户密码,为了后续实验进行评分。

  • 确认密码:再次输入密码。

  • 备注:商品管理账户。

子账户密码如下图所示:

账号类型

说明

高权限账号

只能通过控制台或API创建和管理。

一个实例中只能创建一个高权限账号,可以管理所有普通账号和数据库。

开放了更多权限,可满足个性化和精细化的权限管理需求,例如可按用户分配不同表的查询权限。

拥有实例下所有数据库的权限。

可以断开任意账号的连接。

普通账号

可以通过控制台、API或者SQL语句创建和管理。

一个实例可以创建多个普通账号,具体的数量与实例内核有关。

普通账号默认仅拥有登录数据库的权限,您需要手动给普通账号授予其他特定的权限。更多信息,请参见修改账号权限

普通账号不能创建和管理其他账号,也不能断开其他账号的连接。

在账号管理页面,您创建的账号的状态显示为可用,表示账号已创建完成。

4. 创建数据库

在左侧导航栏,选择配置与管理>数据库管理。

在数据库管理页面,单击创建数据库。

在创建数据库面板,根据说明配置参数,然后单击确定。

参数说明:

  • 数据库(DB)名称:commodity。

  • 数据库Owner:aliyuntest。

  • 支持字符集:UTF8。

  • Collate:C。

  • Ctype:C。

  • 备注说明:商家管理库。

在数据库管理页面,您创建的数据库的状态显示运行中,表示数据库已创建完成。

说明:如果您未找到创建的数据库,请您刷新页面,

5. 设置白名单

在左侧导航栏中,选择配置与管理>集群白名单。

在集群白名单页面,单击default分组右侧的配置 。

说明:如有需要,您也可以单击添加白名单分组,并自定义一个分组名称。

在配置白名单面板,将白名单内IP地址127.0.0.1修改为0.0.0.0/0,允许任何IP地址访问数据库集群,单击确定。

6. 连接数据库

在集群白名单页面,单击登录数据库。

在登录实例对话框中,输入创建的数据库账号(aliyuntest) 和数据库密码,单击测试连接。

在成功对话框中,单击确认。

说明:如果测试连接失败,请按照报错提示检查您录入的实例信息。

在登录实例对话框中,单击登录。

如果出现创建DMS服务关联角色提示,单击确认。

说明:如果未出现相应提示,请您忽略此步骤。

至此云数据库已经成功录入至DMS,您可以在DMS控制台左侧的数据库实例中,查看并管理您的数据库。

7. 上传CSV表格数据到PolarDB-PG数据库

一、打开‘执行SQL’窗口

在DMS控制台,单击左侧的数据库实例,选择已登录实例>您的数据库实例>commodity,双击public,进入SQL执行窗口。

数据管理DMS的SQL窗口可以非常便捷地执行各类SQL语句,同时支持以可视化的方式对目标数据库进行增、删、改、查等操作,适用于数据查询、数据开发等场景。以下界面为SQL窗口。

二、创建数据表

将以下SQL语句复制到SQL窗口中,创建shops表,用于存储CSV表格中的数据。

说明:表的名字可自定义,使用数据库的流程是先创建出数据库,然后创建表,最后在往表中插入数据,关于表的相关操作,可参考数据库cloud认证第二阶段,SQL基础开发与应用。

CREATE TABLE shops (
  id bigint NOT NULL,
  province varchar(32) NOT NULL,
  city varchar(32) NOT NULL,
  district varchar(32) NOT NULL,
  name varchar(128) NOT NULL,
  score float8 NOT NULL,
  comment_number bigint NOT NULL,
  category varchar(32) NOT NULL,
  image_address varchar(256) NOT NULL,
  PRIMARY KEY (id)
);

COMMENT ON COLUMN shops.id IS '商家编号';
COMMENT ON COLUMN shops.name IS '商家名称';
COMMENT ON COLUMN shops.province IS '省份';
COMMENT ON COLUMN shops.city IS '城市';
COMMENT ON COLUMN shops.district IS '区域';
COMMENT ON COLUMN shops.category IS '类型';
COMMENT ON COLUMN shops.score IS '评分';
COMMENT ON COLUMN shops.comment_number IS '评论数';
COMMENT ON COLUMN shops.image_address IS '图片地址';

单击执行 ,页面下方返回执行成功标志,消息通知执行成功。

在表区域,可单击

刷新按钮,将会出现新创建的shops表。

三、数据导入

下载数据。

复制如下链接至无影安全浏览器的地址栏中,下载shops.csv文件。

https://clouder-labfileapp.oss-cn-hangzhou.aliyuncs.com/database/shops.csv

数据导入。

2.1 在DMS控制台左侧,选择常用功能>数据导入。

说明:如果您不是极简模式,请您先在页面右上角进入极简模式后,再按照手册操作。

2.2 在数据变更工单列表页面,根据如下说明配置参数,未提及的保持默认即可。

配置项

示例值

申请的数据变更类别

选择批量数据导入。

数据库

选择创建数据库步骤中所创建的数据库commodity中的public。

您可直接搜索public,找到commodity数据库对应的即可。

文件类型

选择CSV格式。

目标表

选择shops。

数据位置

选择第1行为数据。

说明:

  • 第1行为属性:表格首行是字段名。

  • 第1行为数据:表格首行是数据。

附件

单击上传文件,将上一步骤中下载的数据文件上传。

2.3 点击上传文件后,文件所在位置如下图所示,在弹出的打开对话框中选择链接>下载>shops.csv,然后单击申请提交。

2.4 在数据变更工单列表页面,等待预检查全部通过后,单击执行变更。

2.5 在任务设置对话框中,执行策略选择立即执行,单击确定执行。

2.6 在数据变更工单列表页面,显示执行成功,即为文件上传成功。

至此,已经完成了 CSV 表格数据上传到 PolarDB-PG 数据库的操作,接下来,让我们一起在数据库中查询数据。

四、查询导入PolarDB-PG数据库中的数据

在DMS控制台,单击左侧的数据库实例,选择已登录实例>您的数据库实例>commodity,双击public,进入SQL执行窗口。

在SQL窗口中,输入如下SQL,单击 执行,查询shops表中的全量数据。

SELECT * FROM shops;

查询出的数据为全量的数据,与CSV表格中的数据进行对比,可发现数据一致。

在SQL窗口中,输入如下SQL,单击执行,在shops表中查询在上海且评分高于4.5的商家。

SELECT * FROM shops WHERE city = '上海市' AND score > 4.5;

在SQL窗口中,输入如下SQL,单击执行,更新id为6的商家的评论数。

UPDATE shops SET comment_number = comment_number + 1 WHERE id = 6;

在SQL窗口中,输入如下SQL,单击 执行,删除id为24的商家。

DELETE FROM shops WHERE id = 24;

结语

       完成阿里云云数据库的三个入门实验,标志着你已掌握从传统关系型数据库到云原生数据库的核心操作能力,构建了 “数据存储 — 开发 — 管理” 的完整知识链。从 RDS 的稳定部署与 Excel 数据上云,到 SQL 编程实现复杂业务逻辑,再到 PolarDB 的弹性扩展与高效数据处理,每一个实验都锤炼了数据管理的核心技能,理解了不同数据库架构的适用场景与技术优势。

       通过实战,你不仅学会了数据库账号创建、白名单配置、数据导入导出等基础操作,更深入掌握了 SQL 语句优化、触发器设计、数据可视化分析等开发技巧,以及云原生数据库在高可用性、弹性伸缩上的独特优势。这些能力不仅是认证的核心要求,更是未来参与企业级数据平台搭建、数据中台开发的必备基石。

      技术的价值在于解决实际问题。阿里云的数据库生态(如 RDS、PolarDB、DMS)为数据驱动创新提供了广阔空间,期待你以此次实验为起点,将所学技能应用于数据仓库建设、实时数据分析等场景,进一步探索分布式数据库、Serverless 数据库等前沿领域。在企业加速数据化转型的今天,掌握 “传统 + 云原生” 双数据库技术栈,就是掌握高效处理数据、赋能业务的核心竞争力 —— 这不仅是认证的终点,更是迈向数据领域高阶实践的新起点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stitch .

欢迎各位家人来白嫖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值