Python 3 – MySQL数据库访问
Python数据库接口的标准是Python DB-API。大多数Python数据库接口都遵循此标准。
您可以选择适合您的应用程序的正确数据库。Python Database API支持各种数据库服务器,例如 −
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
- SQLite
这是可用的Python数据库接口列表 − Python Database Interfaces and APIs 。您必须为每个需要访问的数据库下载单独的DB API模块。例如,如果您需要访问Oracle数据库以及MySQL数据库,则必须下载Oracle和MySQL数据库模块。
DB API提供了一个最小的标准,使用Python结构和语法尽可能地与数据库一起使用。该API包括以下内容 −
- 导入API模块。
- 获取与数据库的连接。
- 发出SQL语句和存储过程。
- 关闭连接
Python具有对SQLite的内置支持。在本节中,我们将学习使用MySQL的所有概念。MySQLdb模块是与Python不兼容的流行的与MySQL的接口。相反,我们将使用 PyMySQL 模块。
PyMySQL是什么?
PyMySQL是从Python连接到MySQL数据库服务器的接口。它实现了Python Database API v2.0,并包含一个纯Python的MySQL客户端库。 PyMySQL的目标是成为MySQLdb的替代品。
如何安装PyMySQL?
在进一步进行之前,请确保在计算机上安装了PyMySQL。只需在Python脚本中键入以下内容并执行它即可 −
如果它产生以下结果,则意味着未安装MySQLdb模块−
最后的稳定版本可在PyPI上获得并且可以使用pip安装−
或者(例如,如果没有pip)可以从 GitHub 下载tarball,并在Setuptools中安装如下−
注意 −确保具有根特权以安装上述模块。
数据库连接
在连接到MySQL数据库之前,请确保以下几点−
- 您已创建数据库TESTDB。
- 您已在TESTDB中创建表EMPLOYEE。
- 该表具有字段FIRST_NAME,LAST_NAME,AGE,SEX和INCOME。
- 用户ID“testuser”和密码“test123”设置为访问TESTDB。
- 计算机上正确安装的Python模块PyMySQL。
实例
下面是连接到MySQL数据库“TESTDB”的示例−
运行此脚本,会产生以下结果。
如果与数据源建立了连接,则返回 Connection 对象并将其保存到 db 中以供进一步使用,否则将 db 设置为 None。接下来,使用 db 对象创建一个 cursor 对象,然后使用该对象来执行 SQL 查询。最后,在退出之前,确保关闭数据库连接并释放资源。
创建数据库表
一旦建立数据库连接,我们就可以使用创建的游标的 execute 方法创建表或将记录插入数据库表中。
示例
让我们创建一个名为 EMPLOYEE 的数据库表 –
插入操作
插入操作用于将记录插入数据库表中。
示例
以下示例使用 SQL INSERT 语句向 EMPLOYEE 表中创建一条记录 –
上面的示例可以使用以下方法动态创建 SQL 查询:
示例
下面的代码段是另一种执行方式,您可以直接传递参数 –
读操作
在任何数据库上的读操作都表示从数据库中提取一些有用的信息。
建立数据库连接后,您就可以查询这个数据库了。您可以使用 fetchone() 方法来获取单个记录,也可以使用 fetchall() 方法从数据库表中获取多个值。
- fetchone() - 它取出查询结果集的下一行。当光标对象用于查询表时,返回一个结果集对象。
-
fetchall() - 它获取结果集中的所有行。如果已经从结果集中提取了某些行,则会从结果集中检索剩余的行。
-
rowcount - 这是一个只读属性,返回由execute()方法影响的行数。
示例
以下过程查询薪资超过1000美元的EMPLOYEE表中的所有记录-
输出
这将产生以下结果 –
更新操作
任何数据库上的UPDATE操作意味着更新一个或多个已经在数据库中的记录。
以下过程更新具有 ‘M’ 性别的所有记录。这里,我们将所有男性的年龄增加一岁。
示例
删除操作
当您想从数据库中删除一些记录时,需要使用DELETE操作。以下是从EMPLOYEE删除年龄大于20的所有记录的过程 –
示例
执行事务
事务是一种确保数据一致性的机制。事务具有以下四个属性 –
- 原子性 − 事务要么全部完成,要么就什么也不做。
-
一致性 − 事务必须在一致的状态下开始,并将系统留在一致的状态下。
-
隔离性 − 事务的中间结果在当前事务之外是不可见的。
-
持久性 − 一旦事务提交,其效果是持久的,即使系统发生故障。
Python DB API 2.0 提供了两个方法,即 commit 和 rollback 用于执行事务。
示例
您已经知道如何实现事务。以下是类似的示例 −
COMMIT 操作
Commit 是一种操作,它向数据库发送信号以完成更改,在此操作之后,无法撤销任何更改。
以下是调用 commit 方法的简单示例。
ROLLBACK 操作
如果您对一个或多个更改不满意,并希望完全恢复这些更改,请使用 rollback() 方法。
以下是调用 rollback() 方法的简单示例。
断开数据库连接
要断开数据库连接,请使用 close() 方法。
如果用户使用 close() 方法关闭与数据库的连接,则由 DB 回滚所有未完成的事务。但是,与其依赖于任何数据库低级别实现的详细信息,您的应用程序最好明确调用 commit 或 rollback。
处理错误
有很多错误的来源。一些示例是在执行的 SQL 语句中的语法错误、连接失败或针对已取消或完成的语句句柄调用 fetch 方法。
DB API 定义了每个数据库模块必须存在的几个错误。以下表格列出了这些异常。
序号 | 异常及其说明 |
---|---|
1 | 警告 用于非致命问题。必须是StandardError的子类。 |
2 | 错误 错误的基类。必须是StandardError的子类。 |
3 | 接口错误 用于数据库模块中的错误,而不是数据库本身的错误。必须是Error的子类。 |
4 | 数据库错误 用于数据库中的错误。必须是Error的子类。 |
5 | 数据错误 指数据中的错误,是DatabaseError的子类。 |
6 | 操作错误 指诸如与数据库的连接丢失之类的错误。这些错误通常不受Python脚本程序员的控制。 |
7 | 完整性错误 对于可能损坏关系完整性的情况,如唯一性约束或外键,属于DatabaseError的子类。 |
8 | 内部错误 指数据库模块内部的错误,如光标不再有效。属于DatabaseError的子类。 |
9 | 编程错误 指如错误的表名等原因导致的错误和其它人为造成的错误。属于DatabaseError的子类。 |
10 | 不支持的错误 指调用不支持的功能。属于DatabaseError的子类。 |
您的Python脚本应该处理这些错误。但在使用上述任何异常之前,请确保您的MySQLdb支持该异常。您可以通过阅读DB API 2.0规范来获取更多关于它们的信息。