您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > Python-3基础教程-第7章
Python3基础教程出版社或系部名称主讲:授课教师姓名第7章Python数据库编程数据库通常用于存储和处理程序中的大量数据,数据库中的数据按照一定的模型进行组织和存储。常用的一些数据库,如MicrosoftSQLServer、MicrosoftAccess、MicrosoftFoxPro、Oracle、MySQL、SQLite等,都属于关系数据库。关系数据库中的数据按照关系模型进行存储。Python3.5内置的sqlite3提供了SQLite数据库访问功能。借助于其他的扩展模块,Python也可访问MicrosoftSQLServer、Oracle、MySQL或其他的各种数据库。本章主要内容访问MySQL数据库了解关系数据库访问SQLite数据库123访问MSSQLServer数据库47.1了解关系数据库目前,MicrosoftSQLServer、MicrosoftAccess、MicrosoftFoxPro、Oracle、MySQL、SQLite等常用的数据库都属于关系数据库。在使用Python访问各种关系数据库之前,有必要了解关系数据库的一些相关概念。本节主要讲述:–数据模型–关系数据库的概念和特点–关系数据库语言SQL7.1.1数据模型•数据模型指数据库的结构,有4种常见的数据模型:–层次模型–网状模型–关系模型–面向对象模型1.层次模型•层次模型采用树状结构表示数据之间的联系,树的节点称为记录,记录之间只有简单的层次关系。•层次模型具有下列特点。–有且只有一个节点没有父节点,该节点称为根节点;–其他节点有且只有一个父节点。2.网状模型•网状模型是层次模型的扩展,具有下列特点。–可以有任意多个节点没有父节点。–一个节点允许有多个父节点。–两个节点之间可以有两种或两种以上联系。3.关系模型•关系模型用二维表格表示数据及数据联系,是应用最为广泛的数据模型。•目前,各种常用的数据库,如MicrosoftSQLServer、MicrosoftAccess、MicrosoftFoxPro、Oracle、MySQL、SQLite等,都属于关系模型数据库管理系统。4.面向对象模型•面向对象模型是在面向对象技术基础上发展起来一种的数据模型,它采用面向对象的方法来设计数据库。•面向对象模型的数据库种存储对象以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。7.1.2关系数据库的概念和特点1.基本概念–关系•数据和数据之间的联系称为关系。–二维表•关系数据库使用二维表来表示和存储关系,一个关系就是一个二维表。表中的行称为记录,列称为字段。一个数据库可以包含多个表。7.1.2关系数据库的概念和特点1.基本概念–记录与字段•表中的一行称为一个记录。表中的列为记录中的数据项,称为字段。字段也称为属性或者列。每个记录可以包含多个字段,不同记录包含相同的字段(字段的值不同)。例如,用户表中的每个记录包含用户名、登录密码等字段。•关系数据库不允许在一个表中出现重复的记录。7.1.2关系数据库的概念和特点1.基本概念–关键字•可以唯一标识一个记录的字段或字段组合称为关键字。一个表可有多个关键字,其中用于标识记录的关键字称为主关键字,其他的关键字可称为候选关键字。一个表只允许有一个主关键字。例如,用户表中的用户名可定义为主关键字,在添加记录时,主关键字不允许重复。–外部关键字•如果一个表中的字段或字段组合作为其他表的主关键字,这样的字段或字段组合称为外部关键字。2.关系数据库的基本特点•关系数据库中的表是二维表,表中的字段必须是不可再分的,即不允许表中表。•在同一个表中不允许出现重复的记录。•在同一个记录中不允许出现重复的字段。•表中记录先后顺序不影响数据的性质,可以交换记录顺序。•记录中字段的顺序不影响数据,可以交换字段的顺序。7.1.3关系数据库语言SQL•SQL是StructuredQueryLanguage的缩写,即结构化查询语言,它是关系数据库的标准语言。•MicrosoftSQLServer、MicrosoftAccess、MicrosoftFoxPro、Oracle、MySQL、SQLite等各种关系数据库均支持标准的SQL语言,但各种关系数据库具体在实现SQL时可能有所差别。1.创建和删除数据库•创建数据库使用createdatabase语句。例如:–createdatabasetestdb–testdb为创建的数据库名称。•删除数据库使用dropdatabase语句。例如:–dropdatabasetestdb2.创建表•在数据库中创建表使用createtable语句,其基本格式为:–createtable数据库名.表名(字段名1字段数据类型(长度)sql约束,…..)•在指定了“数据库名”时,创建的新表属于指定数据库,否则新表属于当前数据库。常用的字段数据类型如表7-1所示•最简单的createtable命令只指明表名、字段名和数据类型。例如:–createtableusers(namevarchar(10),birthdate)•sql约束用于为表或字段定义约束条件,常用的约束有:NOTNULL、UNIQUE、PRIMARYKEY、FOREIGNKEY、CHECK、DEFAULT(不区分大小写,习惯在SQL语句中将SQL的关键字用大写)。•可同时使用为字段定义多个约束。3.修改表•修改表使用altertable语句,前面已在修改或删除约束时使用到了该语句。修改表的其他操作通常包括修改表名称、添加字段、修改字段名、修改字段数据类型和删除字段等。4.删除表•删除表使用droptable语句。例如;–droptableusers5.删除表中的全部记录•删除表中的全部记录使用truncatetable语句。例如:–truncatetableusers6.创建表索引•表索引可以按索引字段对记录进行排序,查询索引字段比非索引字段的速度更快。createindex语句用于创建索引。•例如,下面的语句为users表的name字段创建索引:–createindexindex_on_nameonusers(name)7.创建视图•视图是数据库中预定义的查询,创建视图使用createview语句。•例如:–createviewuser_ageasselectname,agefromusers8.执行查询•select语句用于执行查询,查询结果存储在一个表中(称为查询结果集)。select语句基本结构如下(SQL不区分大小写):SELECT输出字段列表FROM表名称[GROUPBY用于分组的字段列表][WHERE筛选条件表达式][ORDERBY排序字段列表[DESC|ASCE]]•返回表中的全部字段–用星号可表示返回表中的全部字段。例如:–select*fromusers•返回表中的指定字段–在需要返回个别字段时,在输出字段列表中包含这些字段,用逗号分隔。例如:–selectname,agefromusers•为字段指定输出名称–默认情况下,查询结果集中字段名与输出字段同名,可以用as为输出字段命名。例如:–selectnameas用户名,ageas年龄fromusers•返回唯一值–使用关键词DISTINCT可去掉返回记录中的重复值。例如:–selectDISTINCTnamefromusers•使用where子句–where子句用于指定筛选条件,满足条件的记录才会出现在查询结果集中。例如:–select*fromuserswhereage20•使用运算符和函数–例如,下面的语句返回name字段值以周开头的记录:select*fromuserswherenamelike周%–例如,下面的语句返回age字段值为15、16或17的记录:select*fromuserswhereagein(15,16,17)–例如,下面的语句返回score字段的平均值、最大值、最小值:selectavg(score)as平均成绩,max(score)as最高分,min(score)as最低分fromscores–例如,下面的语句返回age字段值为15、16或17的记录个数:selectcount(*)fromuserswhereagein(15,16,17)•对查询结果排序–orderby子句用于指定排序字段,查询结果默认按升序(ASC)排序,使用DESC表示降序。例如:select*fromusersoderbyageselect*fromusersoderbyageDESC–可以使用多个排序字段,并分别指明排序方式。例如,下面的语句按name升序,age降序对查询结果排序:select*fromusersoderbynameASCageDESC•分组查询–groupby子句用于执行分组查询。–例如,按年龄统计人数:selectage,count(*)fromusersgroupbyage•多表查询和表的别名–在执行多表查询时,如果多个表中的字段同名,这是需要使用表名称来限定输出字段来自哪个表。字段只属于一个表时,直接给出字段名即可。可以用as为表指定别名,以便简化书写。–例如,从users和scores中查询姓名和成绩:selectusers.name,scorefromusers,sorceswhereusers.name=sorces.name–或者:selecta.name,scorefromusersasa,sorcesasbwherea.name=b.name•多表查询的内连接–多表查询时,可用innerjoin…on(inner可省略)指定连接条件,符合条件的记录才包含在查询结果中。–例如:selectusers.name,scorefromusersjoinsorcesonusers.name=scores.name•多表查询的左连接–左连接指用leftjoin(也叫左外连接leftouterjoin),表示输出左侧表中的全部记录字段,右表中如果没有满足条件的记录,对应字段的输出结果为空(NULL)。–例如:selectusers.name,scorefromusersleftjoinsorcesonusers.name=scores.name•多表查询的右连接–右连接指用rightjoin(也叫右外连接rightouterjoin),表示输出右侧表中的全部记录字段,左表中如果没有满足条件的记录,对应字段的输出结果为空(NULL)。例如:selectusers.name,scorefromusersrightjoinsorcesonusers.name=scores.name•多表查询的全连接–全连接指用fulljoin,表示输出两侧表中的全部记录字段,如果另一侧表中如果没有满足条件的记录,对应字段的输出结果为空(NULL)。例如:selectusers.name,scorefromusersfulljoinsorcesonusers.name=scores.name9.子查询•子查询只在查询中包含另一个查询。•例如,下面的语句返回有成绩记录的用户记录:select*fromuserswherenamein(selectnamefromscores)10.select…into语句•select…into语句通常用于将查询结果写入一个新表中。–例如:select*intoback_usersfromusers•可以指定新表所属的数据,–例如:select*intoback_usersinback_testfromusers11.添加记录•insertinto语句用于为表添加记录,其格式如下。–insertinto表名(字段1,字段2,…)values(数据1,数据2,…)•例如,下面先用createtable语句创建表,然后用insertinto语句添加记录:–createtableusers(idvarchar(10)primarykey,passwordvarchar(10)default111111)–insertin
本文标题:Python-3基础教程-第7章
链接地址:https://www.777doc.com/doc-3942850 .html