安装 MySql
由于 colab 没有 yum 也没有 rpm,也没有 systemctl,然后好不容易搜索到一份用 apt-get 安装的代码,试了试能跑,然后运行的时候找不到服务 mysql。折腾两天,没搞定,然后换了个安装教程成功了。哇,真神奇,原来是通过这样的方式解决的
直接运行下面命令安装 mysql
1 | !sudo apt update |
然后
1 | !sudo service mysql start |
启动 mysql 数据库的服务。
然后用
1 | !sudo mysql -u root -p |
进入大概是 mysql 的命令行的地方。密码直接输入回车就可以了。
MySql 命令
数据库
1 | # 创建一个名为 RUNOOB 的数据库 |
数据类型
数据类型可以分为数值、日期和字符串三类,具体还是见菜鸟教程。主要是懒得搬运了
数据表
通过下面命令可以创建一个数据表
1 | CREATE TABLE IF NOT EXISTS `runoob_tbl`( |
其中 runoob_tbl
是数据表的名称,后面的括号中每一项先是一列的名称,接着是它的数据类型或者相关的一些属性。
- 其中
AUTO_INCREMENT
是指自增的属性,类似于 id,每插入一条增加 1。 NOT NULL
用于设置该列不允许有缺失,当插入一条该列为缺失字段的记录时会报错。PRIMARY KEY
关键字用于定义列为主键。如果定义多列为主键,列之间用逗号分隔。VARCHAR
是指可变长的字符串,其中括号中的数字指的是最大长度。ENGINE
设置存储引擎,CHARSET
设置编码。
关于数据表本身还有一些其他的命令:
show tables;
:显示当前数据库中的数据表desc runoob_tbl;
:描述指定的数据表drop table runoob_tbl;
:删除指定的数据表
插入和查询数据
MySql 中插入语句的语法如下:
1 | INSERT INTO table_name ( field1, field2,..., fieldN ) |
例如我们可以用下面的语句来插入一条数据:
1 | INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) |
在 MySql 中一般可以用 select 语句来进行查询:
1 | SELECT column_name FROM table_name [WHERE Clause] [LIMIT N] [OFFSET M] |
- 可以同时在多个数据表中查询数据,用逗号分隔这些数据表名称即可。
- 也可以同时查询多个列,也是用逗号分隔。
- 可以用
*
作为列的名称,这样会查询所有列的数据。 WHERE
用于限定条件,接下来会介绍。LIMIT
限制返回的记录数的上限。OFFSET
表示查询的偏移量,默认为 0。
WHERE 子句
WHERE 用于限定查询的记录需要满足的条件。可以用 OR
以及 AND
连接多个条件。每个条件关于某个属性取值的,例如 Money >= 30
,其中 Money
是某一列的名称。
比较运算符除了相等是单个等号,剩下都和通用的编程语言类似。
MySql 比较字符串的时候会忽略大小写,需要在加入 BINARY
关键字来区分大小写。例如
1 | SELECT * from runoob_tbl WHERE BINARY runoob_author='runoob.com'; |
Python 连接 MySql 数据库
通过上面的方法安装,得到的 root 账户授权好像是一些奇怪的方式,直接连接不太好弄。先通过下面命令设置一下密码(这里直接把密码设置为 123456):
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456'; |
然后安装模块 pymysql
。
然后通过
1 | db = pymysql.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'RUNOOB', charset="utf8") |
来连接数据库。
可以通过下面的代码来执行 mysql 语句。
1 | # 获取操作游标 |
查询的话先和上面一样用 cursor.execute
执行 SELECT
的语句,然后用下面三种方法中的任意一个来获得查询的结果:
cursor.fetchone()
获取下一个查询的结果,返回一个元组cursor.fetchall()
获取所有的查询结果,会返回一些元组构成的元组cursor.rowcount
返回执行execute()
后影响的行数
例如运行下面代码
1 | cmd = "SELECT * FROM runoob_tbl" |
然后得到:
1 | (((1, '学习 PHP', '菜鸟教程', datetime.date(2023, 7, 29)), |
最后用
1 | db.close() |
关闭数据库连接。