Python 操作 MySQL 数据库(下)

本文字数:4150 字

阅读本文大概需要:11 分钟

写在之前

Python 操作 MySQL 数据库(上)

这篇文章中,我们创建了一个叫 bookdb 的数据库,仅仅是个空架子,没有什么可操作的。我们知道要操作数据库就要在它里面建「表」。在本篇文章中,我会简要介绍如何使用 MySQL 以及如何用 Python 操作数据库,今天内容较多,下面让我们正式开始。

连接数据库操作

在上一篇文章中,我们已经完成了数据库的连接:

就数据库而言,连接之后就要对其操作。我在上面说了,要操作数据库,就必须在里面建「表」,那么什么是数据库的表呢?下面引用一下《维基百科》中对数据库表的简要解释:

在关系数据库中,数据库表示一系列二维数组的集合,用来代表和存储数据对象之间的关系。它由纵向的列和横向的行组成。

对于特定的数据库表,列的数目一般事先固定,各列之间可以由列名来识别。而行的数目可以随时、动态变化,每行通常都可以根据某个(或某几个)列中的数据来识别,我们把这个称为「候选键」。

在 bookdb 中建立一个存储用户名,用户密码和用户邮箱的表,其结构如下(提前做好的,可以在后面再看到):

在这里需要特别说明一下:我在这部分简化了一下细节,是为了突出重点,所以没对密码加密,直接明文保存的,这种方式是很不安全的。

数据库表

直接操作数据库不是我们这个系列的重点,但是这个又关联到后面的操作,为了让大家在阅读上连贯,我在这里快速的说明如何建立数据库表并输入内容。并且考虑到看这个系列的读者大多数是零基础的学习者,所以我在这仅用非常简单的方式展示如何向数据库中插入数据。

用 show tables 命令显示这个数据库中是否有数据表,查询的结果显示为空。接下来用下面的命令建立一个数据表,这个数据表的内容就是上面所说明的:

上面建立的数据表的名称是 users,其中包含上述字段,可以用下面的方式查看该数据表的结构:

通过上述查询显示,在 bookdb 这个数据库中已经存在了一个表,它的名字是 users。

上面显示的是 users 的结构。由此我们得到了一个空表,我们可以查询来看看:

接下来我们向里面插入一条信息:

然后再来查询一下表:

这样就得到了一个有内容的数据库表。

操作数据库

要操作数据库,首先要保证你已经连接了数据库,如果没有,请使用前文讲述的方式操作。

Python 建立了一个与数据库的连接,其实是建立了一个 pymysql.connect() 的实例对象(连接对象)。Python 就是通过连接对象和数据库对话。这个连接对象也有自己的方法:

因为方法很多,我就不在这粘贴过结果来了。我在这里介绍 4 个比较常用的,并用于操作数据库。当然了,这些方法都可以使用 help() 查看文档。

commit():如果数据库表进行了修改,用这个方法提交保存当前的数据。当然如果此用户没有权限的话,什么也不会发生。

rollback():如果有权限,就取消当前的操作,否则就会报错。

cursor([cursorclass]):返回连接的游标对象,通过游标执行 SQL 语句。

close():关闭连接。

Python 是通过游标执行 SQL 语句的,所以连接建立以后,要利用连接对象得到游标对象,方法如下:

此后就可以利用游标对象的方法对数据库进行操作。

1.插入

没有报错,并且返回一个结果,说明有一行记录操作成功,让我们进入到 mysql 交互模式看一下:

奇怪,怎么没有看到新增加的那一条呢?上面也没报错啊。这里需要注意的是,通过 cur.execute() 对数据库进行操作以后,没有报错,完全正确,但是不等于数据就已经提交到了数据库中,还必须要用到连接对象(pymysql.connect(),不是游标对象)的一个方法 commit(),将数据提交上去,也就是进行了 cur.execute() 操作以后,要将数据提交才能有效改变数据库的内容。

然后我们再到 mysql 交互模式下试一试:

果然如此。这就如同编写一个文本一样,将文字写到文本上,必须执行 ctrl + s 才能保存。

2.查询

如果要从数据库中查询数据,则也用游标的方法 execute() 来操作:

这说明从 users 表汇总查询出来了 2 条记录。但是这个似乎并不怎么友好,我们只能看到 2,但是如何能像在 mysql 交互模式中那样把所有的记录都列出来呢?这就得用到游标对象的 fetchall()、fetchmany(size=None)、fetchone(),scroll(value,mode=‘relative’) 等方法。

果然逐条显示出来了。

3.更新数据

学习了上边的内容,再学习更新数据库里的数据就很简单了,但在这我还是要提醒的是,如果更新完毕,和插入数据一样,都需要 commit() 来提交保存(下面的 cur 依然还是游标对象,跟前面建立的方法一样):

从上述的操作中可以看出,已经将数据库中第二条的用户名修改为 mypython,用的就是 SQL 中的 update 语句。不过,要真的实现在数据库中的更新,还要运行下面的语句:

当操作数据完毕后,不要忘记把打开的关掉:

写在之后

Python 操作 MySQL 数据库到这就算写完了,这两部分很长,内容很长,我写的时间也很长,希望能给你带来帮助,也希望你能认真的看下去,真是写的手都酸了。。

如果你觉得这篇文章对你有帮助的话,欢迎点个赞支持一下。

The end。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180925A09PM500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券