
2.1 操作数据库
数据库的种类很多,如MySQL、SQLite、Oracle、SQL Server等,它们的基本功能是一样的,为了简化对数据库的操作,大部分语言提供了标准化的接口。
Python的DB-API是大多数的数据库访问接口,DB-API是一个规范,定义了一系列必须使用的对象及通过对象访问数据库的方式,为各种各样的不同数据库系统提供一致的访问接口,使用这种方式连接各数据库后,可以用相同的方式操作各数据库。
Python操作数据库的过程如图2-1所示。

图2-1 Python操作数据进程
1.连接对象
数据库连接对象(Connection Object)完成数据库游标对象的获取、事务的提交、事务的回滚、数据库的关闭等方法。
Python获取连接对象使用Connect方法,返回一个Connect对象,可以通过这个对象来访问数据库。这个函数的参数会随着数据库类型的不同有所区别,Connect方法的一般形式如下。

其中,dsn为数据源名称,user为用户名,password为密码,database为数据库名称。
返回的Connect对象的常用方法如下。
(1)close():关闭此Connect对象,关闭后无法再进行操作。
(2)commit():提交当前事务。
(3)rollback():取消当前事务。
(4)cursor():创建游标对象。
2.游标对象
Connect对象的cursor()方法会创建一个游标对象,这个游标对象可以操作数据库,游标主要提供执行SQL语句、调用存储过程、获取查询结果等功能。
游标对象的常用方法如下。
(1)close():关闭游标对象。
(2)fetchone():活动查询结果集的下一行。
(3)fetchmany(size):获取指定数量的记录。
(4)fetchall():获取查询结果中的所有行。
(5)excute(sql[, args]):执行一个数据库SQL命令。
(6)excutemany(sql, args):用于批量操作。
(7)nextset():跳至下一个可用的结果集。
(8)arraysize():使用fetchmany(size)获取的行数,默认为1。
需要注意的是,对于MySQL数据库,Python 2.x用的是MySQLdb模块,Python 3.x之后的版本不支持MySQLdb模块,用的是Pymysql模块,这两个模块的功能是相同的。
2.1.1 操作SQLite
SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。在Python中,使用Sqlite3创建数据库的连接,连接对象会连接现有数据库或者自动创建数据库文件,连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的数据库。Sqlite3提供了一个与DB-API 2.0规范兼容的SQL接口,不需要单独安装该模块,Python 2.5.x以上版本默认自带了该模块。
使用Sqlite3模块,首先需要创建一个表示数据库的连接对象,然后可以创建光标对象,光标对象可以执行所有的SQL语句。
下面的代码将创建一个test.db数据库,然后创建一个表trading。


执行上述代码,会在当前目录中创建一个数据库文件test.db。
可以使用列表批量插入数据库,代码如下。

下面将查询所有记录,代码如下。

查询结果如图2-2所示。

图2-2 查询数据库
如果需要频繁访问数据库,可以建立内存数据库,代码如下。

2.1.2 操作MySQL
MySQL是一个常用的关系型数据库管理系统,是Oracle旗下的产品。在Web应用方面,MySQL是最好的数据库应用软件之一。MySQL主页:https://www.mysql.com/,如图2-3所示。

图2-3 MySQL的主页
MySQL使用的SQL语言是用于访问数据库的标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、成本低及开放源码等特点,很多中小型项目的开发选择MySQL作为数据库。
目前MySQL有如下三种类型的版本。
(1)MySQL Enterprise Edition(商业版)。其中包含MySQL的所有内容及管理工具。
(2)MySQL Cluster CGE(商业版)。MySQL的官方集群部署方案,可通过自动分片支持读写扩展,可实时备份冗余数据,是可用性最高的方案。
(3)MySQL Community Edition(社区免费版)。
MySQL的使用方法如下。
(1)从MySQL的主页下载数据库安装软件,这里选择社区版的Windows安装版,如图2-4所示。

图2-4 MySQL的Windows安装版
(2)单击Download按钮,进入下载页面。如果有MySQL的账号,可以单击Login按钮,登录以后再下载,如果没有账号,则单击下方的“No thanks,Just start my download”超链接,直接进行下载,如图2-5所示。

图2-5 下载MySQL社区版
(3)下载后的文件名为“mysql-installer-community-8.0.19.0.msi”,双击文件开始安装,如图2-6所示。

图2-6 MySQL安装
默认的安装路径为“C:\Program Files\MySQL\MySQL Server 8.0\bin”,安装完成以后,将此路径加入环境变量PATH。
(4)在开始菜单就可以看到MySQL的启动项,选择MySQL 8.0 Command Line Client,即可打开MySQL的操作窗口,如图2-7所示。

图2-7 MySQL的操作窗口
通过命令行操作MySQL数据库界面不是很友好,Navicat for MySQL是专为MySQL设计的高性能数据库管理及开发工具,Navicat for MySQL主要功能包括SQL创建连接、新建数据库、新建表、数据传输、导入或导出、数据或结构同步、报表、备份等,为管理和使用MySQL或MariaDB提供了理想的解决方案。Navicat官方主页:https://www.navicat.com.cn/。
(5)从官方主页下载Navicat for MySQL,安装完成后启动,进入主界面,新建连接,选择MySQL,填入相关信息,即可进入MySQL数据库,如图2-8所示。
(6)在Navicat创建数据库Student,如图2-9所示。
(7)Python要访问数据库,需要安装PyMySQL模块,如图2-10所示。PyMySQL也遵守Python DB API 2.0规范,所以操作MySQL数据库与SQLite相似。

图2-8 Navicat for MySQL新建连接

图2-9 创建数据库Student

图2-10 安装PyMySQL模块
在Python IDLE中输入下面的代码,查询刚才新建的数据库Student的数据库版本。

查询结果:{'VERSION()':'8.0.15'}。
下面代码可新建一个表,并插入记录。

在Navicat中可以看到刚才创建的表和插入的记录,如图2-11所示。

图2-11 新建的表和插入的记录
下面代码可查询表,并输出记录。

输出结果如下。
