1、内容提纲内容提纲12.1 数据库概述2 212.2 Python数据库编程接口(DB-API)3 312.3 MySQL关系数据库操作4 412.4 SQLite数据库与操作1 1引例v引例 如右表所示是联想电脑某年在各地区的销售情况。现在问题是:(1)表中数据如何保持?(2)如何对多表中的数据进行关联操作?如求销量前5的地区的平均成交均价?地区联想电脑成交均价(元)广州1233335655.00深圳945645700.00珠海856775645.00中山677775635.00佛山456465650.00北京967865800.00上海1200785810.00海南355555600.00成
2、都234455648.0012.1 数据库概述数据库概述v数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库,用户可以对其中的数据进行新增、查询、更新、删除等操作。v数据库管理系统v 典型关系数据库管理系统v Microsoft SQL Server,MySQL、Oracle、SQLitev 典型非关系数据库v Mongodb,Redis,Hbase12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.1 DB-API简介与统一操作模式 DB-API简介 DB-API是一个规范,它定义了一系列必须的对象和数据库存取方式
3、,可以为各种不同的数据库管理系统的数据库操作提供一致的访问接口。12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.1 DB-API简介与统一操作模式 Python DB-API统一操作流统一操作流程程(1)导入DB-API模块;(2)获取与数据库的连接;(3)执行相关操作(SQL语句和存储过程);(4)关闭与数据库的连接。12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.2 模块接口(Module Interface)模块方法与属性模块方法与属性Connect()为连接函数;apilevel为字符串常量,表示该DB-API所兼容的DB
4、-API最高版本号,默认为“1.0”;threadsafety为整型常量,表示该DB-API所支持的线程安全级别,其可能取值范围0-3;paramstyle为字符串常量,表示该DP-API所期望的SQL参数风格。类别名称描述方法connect()连接函数,同时也是Connection对象构造函数全局属性apilevelDB-API的版本号threadsafety线程安全级别paramstyle支持的SQL语句参数风格12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.2 模块接口(Module Interface)connect()函数函数 connect()是一个
5、用来建立程序与数据库连接的函数,并返回一个Connection对象。具体参数如下表所列。一个连接案例:一个连接案例:connect(dsn=myhost:MYDB,user=guido,password=234$)参数名参数意义dsn数据源user用户名password用户密码host数据库所在主机database数据库名称 12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.3 Connection连接对象 Connection连接对象搭建了应用程序与数据库之间的桥梁,完成将命令送往服务器,并从服务器接收数据等功能。该对象常用方法如下表:方法描述备注cursor(
6、)方法返回给定连接上建立的游标对象(Cursor Object)。如果数据库没有提供对应的游标对象,那么将由程序来模拟实现游标功能。close()马上关闭数据连接(而不是当_del_方法被调用的时候),连接应该此后变得不可用,再次访问本连接对象应该触发一个错误(Error或其子类),同样所有使用本连接对象的游标(cursor)对象,也会导致例外发生。需要注意的是,在关闭连接对象之前,没有首先提交对数据库的改变 将会导致一个隐含的回滚动作(rollback),这将丢弃之前的数据改变操作。commit()提交任何挂起的事务到数据库中。需要注意的是,如果数据库支持自动提交(auto-commit),
7、必须 在初始化时关闭。一般会有一个接口函数关闭此特性。rollback()此为可选方法,对于支持事务的数据库,调用此方法将导致数据库回滚到事务开始时的状态。关闭数据库连接之前没有明确调用commit()提交 数据更新,将隐含导致rollback()被执行。12.2 Python数据库编程接口(数据库编程接口(DB-API)v12.2.4 Cursor游标对象 游标对象用来实现程序与数据库的交互,一个游标对象允许用户执行数据库操作的相关命令以及获取到查询结果。该对象常用方法如下表:类别名称描述属性connection创建此游标对象的数据库连接arraysize使用fetchmany()方法一次取
8、出多少条记录,默认为1lastrowid返回最后更新id(可选)rowcount最后一次execute()操作返回或影响的行数方法excute(sql,args)执行一个数据库查询或命令excutemany(sql,args):执行多个数据库查询或命令fetchone()得到结果集的下一行fetchmany(size=cursor.arraysize)得到结果集的下几行fetchall()得到结果集中剩下的所有行_iter_()创建一个迭代器对象next()使用迭代对象得到结果集的下一行close()关闭此游标对象12.3 MySQL关系数据库操作关系数据库操作v概述 MySQL是一个关系型数
9、据库管理系统,目前属于 Oracle 旗下产品。MySQL支持UNIX、Linux、Mac OS、Windows等多种操作系统。目前MySQL是最流行的关系型数据库管理系统之一。支持MySQL的Python DB-API 在Python2.x中使用最为广泛的是mysqldb;在Python3.x中使用最为广泛的是PyMySQL;MySQL Connector/Python 是 MySQL 官方提供的 Python3.x连接 MySQL 数据库的驱动程序;12.3 MySQL关系数据库操作关系数据库操作v12.3.1 PyMySQL下载与安装 直接使用pip命令安装$pip install Py
10、MySQL 安装过程及成功界面如下图所示。12.3 MySQL关系数据库操作关系数据库操作v12.3.2 PyMySQL基本操作 12.3.2.1 数据库连接操作数据库连接操作 PyMySQL主要是通过connect()来建立与数据库的连接,案例代码如下:import pymysql connection=pymysql.connect(host=localhost,user=python,passwd=123456,db=UserInfo,port=3306,)print(connection.host_info)connection.close()12.3 MySQL关系数据库操作关系数据
11、库操作v12.3.2 PyMySQL基本操作 12.3.2.2 创建数据库表操作创建数据库表操作 import pymysql connection =pymysql.Connect(host=localhost,port=3306,user=python,passwd=123456,db=UserInfo)cursor=connection.cursor()cursor.execute(DROP TABLE IF EXISTS UserList)sql=CREATE TABLE UserList(userID CHAR(32)not NULL,userName CHAR(40)not NUL
12、L,userPassword CHAR(20),userAge INT )cursor.execute(sql)connection.close()12.3 MySQL关系数据库操作关系数据库操作v12.3.2 PyMySQL基本操作 12.3.2.1新增、删除、更新记录操作新增、删除、更新记录操作 Python异常处理机制 try:可能会发生异常语句块 except Exception as e:第一种异常类型处理 except Exception as e:第二种异常类型处理 except:其他的异常类型处理 else:如果没发生任何异常则执行这里 finally:12.3 MySQL关系
13、数据库操作关系数据库操作v12.3.2 PyMySQL基本操作 12.3.2.1新增、删除、更新记录操作新增、删除、更新记录操作 通过connection对象的cursor()方法获取游标cursor对象的各种方法实现数据库记录的新增、删除与更新;新增记录SQL语句 INSERT INTO UserList(userID,userName,userPassword,userAge)VALUES(1,zheng,123,20)删除记录SQL语句 updatesql=UPDATE UserList SET userAge=userAge+1 WHERE userName=zheng 更新记录SQL
14、语句 deletesql=DELETE FROM UserList WHERE userName=zheng 新增记录示例:import pymysql connection =pymysql.Connect(host=localhost,port=3306,user=python,passwd=123456,db=UserInfo)cursor=connection.cursor()insertsql=INSERT INTO UserList(userID,userName,userPassword,userAge)VALUES(1,zheng,123,20)try:cursor.execu
15、te(insertsql)mit()except Exception as e:connection.rollback()print(e)finally:connection.close()12.3 MySQL关系数据库操作关系数据库操作v12.3.2 PyMySQL基本操作 12.3.2.3 查询记录操作查询记录操作 相对于新增、修改和删除而言,数据库的查询操作比较复杂,主要体现在对查询结果的处理上,在实际使用过程中可以通过cursor的相关属性和方法实现对结果集的获取和处理。请参考下面示例程序;查询记录示例:import pymysql connection =pymysql.Connec
16、t(host=localhost,port=3306,user=root,passwd=,db=UserInfo)cursor=connection.cursor()selectsql=SELECT*FROM UserList try:cursor.execute(selectsql)resultSet=cursor.fetchall()for data in resultSet:userID=data0 userName=data1 userPassword=data2 userAge=data3 print(userID+userName+userPassword+str(userAge)
17、except Exception as e:print(e)finally:connection.close()12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite介绍 SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,它的数据库就是一个文件,SQLite 直接访问其存储文件。与关系数据库进行交互的标准 SQLite 命令类似于 SQL,包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP,但是在 SQLite 中,并不完整支持SQL92特性,比如ALTER TAB
18、LE命令,只是支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT。12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite安装 1、进入到http:/www.sqlite.org/download.html页面下载sqlite-tools-win32-*.zip和sqlite-dll-win32-*.zip两个压缩文件。2、在某个系统盘创建相关文件夹,比如E:SQLite,然后将以上两个文件夹解压缩得到E:S
19、QLite,如果sqlite-tools-win32-*.zip解压缩后存在子文件夹,则将该子文件夹内的文件复制到E:SQLite,这样在E:SQLite将得到sqlite3.def、sqlite3.dll、sqlite3.exe、sqldiff.exe、sqlite3_analyzer.exe五个文件。3、将添加 E:SQLite到PATH 环境变量,最后在命令提示符下,使用sqlite3 命令,将显示如下结果,表明SQLite安装正确。12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite基本操作 SQLite命令形式 第一种是在cmd命令行中执
20、行的命令,比如sqlite3.exe命令;第二种是进入sqlite环境后的“点命令”,比如.help,该种命令以“.”开始,结尾没有“;”;第三种是对数据进行操作的命令,比如select,该种命令结尾必须以“;”结束。12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite基本操作 SQLite命令:创建和打开数据库 创建数据库命令:sqlite3 数据库名 创建成功后会进入到sqlite操作环境 在该环境中,通过“.database”查看已有的数据库,通过“.quit”退出该环境 再次输入“sqlite3 e:sqlitedemo.db”则会进入该已
21、创建的数据库中12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite基本操作 SQLite命令:创建表 SQLite使用CREATE TABLE语句在任何给定的数据库创建一个新表,创建基本表需要涉及到命名表、定义列及每一列的数据类型。基本语法如下:CREATE TABLE table_name(column1 datatype PRIMARY KEY(one or more columns),column2 datatype,);12.4 SQLite数据库与操作数据库与操作v12.4.1 SQLite介绍与安装 SQLite基本操作 SQLite命
22、令:表基本操作新增、查询、删除、更新表数据记录 在SQLite环境中,表数据记录的基本操作与其他关系数据库的操作差别不大。新增数据记录语句:INSERT INTO TABLE_NAME(column1,column2,column3,.columnN)VALUES(value1,value2,value3,.valueN);删除数据记录语句:DELETE FROM table_name WHERE condition;更新表数据记录语句:UPDATE table_name SET column1=value1,column2=value2.,columnN=valueN WHERE condi
23、tion;查询表数据记录语句:SELECT column1,column2,columnN FROM table_name where condition;12.4 SQLite数据库与操作数据库与操作v12.4.2 SQLite-Python接口及操作 当采用Python操作SQLite时也需要一个面向SQLite的数据库引擎的数据库接口,pysqlite即为一个面向Python编程的DB-API接口,它让一切对于SQLite的操作都变得异常简单。从Python2.5起,pysqlite成为Python的一个标准模块,在使用时,它被简称为sqlite3模块。12.4 SQLite数据库与操作
24、数据库与操作v12.4.2 SQLite-Python接口及操作 Python中操作SQLite数据库过程(1)用sqlite3.connect(“userdb”)创建数据库连接,假设返回的连接对象为conn;(2)使用conn.cursor()方法创建游标对象cursor;(3)基于cursor对象执行各种操作。如果该数据库操作不需要返回结果,就直接用cursor.execute(sql)执行sql语句,根据数据库事务隔离级别的不同,可能修改数据库需要mit;如果需要返回查询结果则用conn.cursor创建游标对象cur,通过cursor.execute查询数据库,用cur.fetchal
25、l/cur.fetchone/cur.fetchmany返回查询结果;(4)关闭cursor,conn对象。12.4 SQLite数据库与操作数据库与操作v12.4.2 SQLite-Python接口及操作 Python中操作SQLite数据库示例请具体源码请参考课本exam12-5.py12.5 本本章章 小小 结结v 1数据库:数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库,用户可以对其中的数据进行新增、查询、更新、删除等操作;v 2.DB-API:DB-API是一个规范,它定义了一些列必须的对象和数据库存取方式,可以为各种不同的数据库接口程序
26、提供一致的访问接口,使得在不同的数据库之间移植代码成为一件轻松的事情。v 3游标:游标对象允许用户执行数据库的相关命令以及获取到查询结果。常见的游标的方法有execute(),fetchone(),fetchall()等。v 4.PyMySQL是一个支持python3.x操作MySQL数据库的数据库操作包,其基于DB-API规范,用户通过该包可以方便操作MySQL数据库。v 5.SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,在小型或者嵌入式应用系统上目前受到广泛的使用。sqlite3提供了与 DB-API 2.0规范兼容的 SQL 接口,目前已经集成在Python安装包里面,用户可以直接使用sqlite3包实现对SQLite数据库的各种操作。