Py程序与基础教程 12_第1页
Py程序与基础教程 12_第2页
Py程序与基础教程 12_第3页
Py程序与基础教程 12_第4页
Py程序与基础教程 12_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch16数据库访问本章要点:16.1数据库基础16.2Python数据库访问模块16.3使用sqlite3模块连接和操作SQLite数据库16.4使用SQLiteStudio查看和维护SQLite数据库资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。

案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。电子资源:扫描封底的“补充资源”二维码,在公众号“书圈”中下载,习题参考答案、教学大纲、教学案例、思政刚要和案例分析,以及Python计算生态等补充知识。

题库自测平台:扫描封底刮刮卡中的二维码,登录网站(),进入本书“题库”页面,选择相应章节练习数据库基础数据库存储数据的仓库,即存储在计算机系统中结构化的、可共享的相关数据的集合数据库管理系统(DatabaseManagementSystem,DBMS)用于管理数据的计算机软件定义数据、操作数据以及维护数据目前流行的数据库管理系统产品适合于企业用户的网络版DBMS:如Oracle、MicrosoftSQLServer、IBMDB2等适合于个人用户的桌面DBMS:如MicrosoftAccess等数据库系统(DatabaseSystem,DBS)计算机硬件、操作系统、DBMS、开发工具、应用系统、数据库管理员(DatabaseAdministrator,DBA)、用户数据库模型现实世界的数据可以抽象为概念模型(ConceptualModel),也称为信息模型。信息模型可以转换为数据库模型。数据的抽象转换过程如图16-1所示常用的数据库模型层次模型(HierarchicalModel)、网状模型(NetworkModel)、关系模型(RelationalModel)和面向对象的数据模型(ObjectOrientedModel)概念模型表示概念模型的方法有很多,最常用的是实体-联系(Entity-Relationship)方法。实体-联系方法把世界看作是由实体(Entity)和联系(Relationship)构成的。实体是指现实世界中具有一定特征或属性并与其它实体有联系的对象,在关系模型中实体通常是以表的形式来表现。表的一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。联系是指实体之间的对应关系,通过联系就可以使用一个实体的信息来查找另一个实体的信息。联系可以分为以下三种一对一:如一个部门只能有一个经理,而一个经理只能在一个部门任职,部门和经理为一对一的联系。一对多:如一个部门有多名员工,而一名员工只能在一个部门工作,部门和员工为一对多的联系。多对多:如一名学生可以选修多门课程,而一门课程可以有多名选修的学生,学生和课程是多对多的联系。两个实体之间的三种联系E-R图E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。E-R图通常包含以下四个部分。(1)矩形框:表示实体,在框中记入实体名。(2)菱形框:表示联系,在框中记入联系名。(3)椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一条下画线。(4)连线:实体与属性之间、实体与联系之间、联系与属性之间用直线相连,并在直线上标注联系的类型。例如,学生选课系统的E-R图如图16-3所示关系数据库数据库中的表行(Row)包括了若干列信息项的一行数据,也称为记录(Record)或元组(Tuple)列(Column):列由同类的信息组成,又称为字段(Field);列的标题称为字段名候选键(CandidateKey):某个字段或者字段组合可以唯一标识一条记录主关键字(PrimaryKey):用于唯一确定一条记录外键(ForeignKey):一个字段是另一张表的主键通用数据库访问模块:ODBCODBC(OpenDatabaseConnectivity,开放数据库互连)提供了一种标准的应用程序编程接口(ApplicationProgrammingInterface,API)方法来访问数据库管理系统。在Windows平台上,常用的数据库产品都实现了其各自的ODBC驱动程序,包括Oracle、DB2、MicrosoftSQLServer、Access等数据库。因为通过ODBC,可以实现通用的数据库访问。Python提供了通过如下几种ODBC访问数据的模块。ODBCInterface:随PythonWin附带发行的模块。pyodbc:开源的PythonODBC接口,完整实现了DB-API2.0接口。mxODBC:流行的mx系列工具包中的一部分(非商业开发需付费),实现了绝大部分DB-API2.0接口通用数据库访问模块:JDBCJDBC(JavaDatabaseConnectivity,Java数据库连接)是基于Java的面向对象的应用编程接口,描述了一套访问关系数据库的Java类库标准。在Jython2.1以后的发行版中,包括通过JDBC访问数据的模块zxJDBC,建立在底层的JDBC接口之上,支持DB-API2.0接口专用数据库访问模块SQLite数据库和sqlite3模块SQLite是一款开源的轻型数据库,占用资源非常低,广泛用于各种嵌入式设备中SQLite支持各种主流的操作系统,包括Windows、Linux、Unix等,并与许多程序语言紧密结合,包括Python。SQLite是遵守ACID(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))的关系数据库管理系统,实现了多数的SQL-92标准,包括事务、触发器和多数的复杂查询。SQLite不进行类型检查,例如可以把字符串插入到整数列中。该特点特别适于与无类型的脚本语言(例如Python)一起使用。SQLite整个数据库包括数据库定义、表、索引和数据本身等,都存储在一个单一的文件中,其事务处理通过锁定整个数据文件而完成。SQLite引擎不是程序与之通信的独立进程,而是在编程语言内直接调用API来实现,即SQLite是应用程序的组成部分,所以具有内存消耗低、延迟时间短、整体结构简单等优点。SQLite官方网址为“”SQLite支持的数据类型&sqlite3模块SQLite支持的数据类型包括NULL、INTEGER、REAL、TEXT和BLOB,分别对应Python的数据类型None、int、float、str和bytes。用户可以使用适配器(adapters),以将更多的Python类型存储到SQLite数据库中;也可以使用转换器(converters),把SQLite数据类型转换为Python的数据类型Python标准模块sqlite3使用C语言实现,提供访问和操作数据库sqlite的各种功能。sqlite3模块主要包括下列常量、函数和对象。sqlite3.version:常量,版本号。sqlite3.connect(database):函数,连接到数据库,返回Connect对象。sqlite3.Connect:数据库连接对象。sqlite3.Cursor:游标对象。sqlite3.Row:行对象使用sqlite3模块连接和操作SQLite数据库(1)1.导入相应的数据库模块:importsqlite32.建立数据库连接,返回Connection对象使用数据库模块的connect()函数建立数据库连接,返回连接对象con,命令形式如下:con=sqlite3.connect(connectstring)#连接到数据库,返回sqlite3.Connection对象3.创建游标对象cur:使用如下命令可以调用con.cursor()函数创建游标对象cur:cur=con.cursor()#创建游标对象4.使用Cursor对象的execute执行SQL命令返回结果5.获取游标的查询结果集6.数据库的提交和回滚7.关闭Cursor对象和Connection对象使用sqlite3模块连接和操作SQLite数据库(2)4.使用Cursor对象的execute执行SQL命令返回结果调用Cursor对象的cur.execute()/executemany()/executescript()方法查询数据库直接使用Connection对象的execute()/executemany()/executescript()方法5.获取游标的查询结果集调用Cursor对象的cur.fetchall()/cur.fetchone()/cur.fetchmany()返回查询结果使用sqlite3模块连接和操作SQLite数据库(3)6.数据库的提交和回滚根据数据库事务隔离级别的不同,可以提交或回滚,命令形式如下:

mit():提交。

conn.rollback():回滚7.关闭Cursor对象和Connection对象最后,需要关闭打开的Cursor对象和Connection对象,命令形式如下:

cur.close():关闭Cursor对象。

con.close():关闭Connection对象创建数据库和表使用sqlite3.connect("数据库文件名")可以创建或打开SQLite数据库,并返回连接对象con;使用con.execute("createtable…"),可以创建表【例16.1】创建数据库和表(DBCreate.py)。创建数据库sales,并在其中创建表region,表中包含两个列:id和name,其中id为主码(primarykey)importsqlite3#创建SQLite数据库:c:\Pythonpa\ch16\sales.dbcon=sqlite3.connect(r"c:\Pythonpa\ch16\sales.db")#创建表regions,包含两个列,id(主码)和namecon.execute("createtableregion(idprimarykey,name)")数据库表记录的插入、更新和删除在数据库表中插入、更新和删除记录的一般步骤如下。(1)建立数据库连接。(2)根据SQLInsert、Update、Delete语句,使用con.execute(sql)执行数据库记录插入、更新、删除操作,并根据返回的值判断操作结果。(3)提交操作。(4)关闭数据库【例16.2】数据库表记录的插入、更新和删除【例16.2】数据库表记录的插入、更新和删除操作示例(DBUpdate.py)importsqlite3regions=[("021","上海"),('022',"天津"),("023","重庆"),("024","沈阳")]#打开SQLite数据库:c:\Pythonpa\ch16\sales.dbcon=sqlite3.connect(r"c:\Pythonpa\ch16\sales.db")#使用不同的方法分别插入一行数据con.execute("insertintoregion(id,name)values('020','广东')")con.execute("insertintoregion(id,name)values(?,?)",('001','北京'))#插入多行数据con.executemany("insertintoregion(id,name)values(?,?)",regions)#修改一行数据con.execute("updateregionsetname=?whereid=?",('广州','020'))#删除一行数据n=con.execute("deletefromregionwhereid=?",("024",))print('删除了',n.rowcount,'行记录')mit()#提交con.close()#关闭数据库数据库表的查询操作查询数据库的一般步骤如下。(1)建立数据库连接。(2)根据SQLSelect语句,使用con.execute(sql)执行数据库查询操作,返回游标对象cur。(3)循环输出结果。(4)关闭数据库。【例16.3】查询数据表中的记录信息(DBquery.py)importsqlite3#打开SQLite数据库:c:\Pythonpa\ch16\sales.dbcon=sqlite3.connect(r"c:\Pythonpa\ch16\sales.db")#查询数据库表的记录内容cur=con.execute("selectid,namefromregion")forrowincur:#循环输出结果print(row)con.close()使用SQLiteStudio查看和维护SQLite数据库使用SQLite可视化工具,可以方便查看程序运行后更新数据库的结果【例16.4】下载、安装和使用SQLiteStudio.exe(1)下载SQLiteStudio。在浏览器中输入SQLiteStudio官网地址https://sqlitestudio.pl/,下载最新版本(sqlitestudio-3.1.1.zip)。(2)运行SQLiteStudio。解压缩下载的文件到本地任何目录下,双击运行解压缩的程序SQLiteStudio.exe,打开SQLiteStudio。(3)打开数据库。按快捷键“Ctrl+O”,选择打开数据“c:\pythonpa\d\DB\jwxt.db”,查看数据库中表的结构,或者查看表的数据本章小结实验和习题实例16.1~实例16.4复习题单选题填空题思考题案例研究1:基于数据库和GUI的教务管理系统本章案例研究图形用户界面的教务管理系统的设计与实现,帮助读者深入了解使用wxPython和数据库开发图形用户界面的数据库应用程序的思维和流程案例研究的解题思路和源代码等以电子版形式提供,具体请扫描教程中的二维码系统总体设计基于数据库的GUI教务管理系统包括三种类型的用户:教务员、教师和学生。只有登录用户才能够使用该系统提供的功能。系统根据登录用户的权限,自动区分用户身份,并显示相应的功能菜单页面数据库设计(1)用户信息表(UserInfo)。用户表用于储存系统用户信息(2)课程信息表(Course)。课程信息表用于储存课程信息(3)教学班信息表(JXB)。教学班信息表用于储存开课信息(4)学生成绩表(Grads)。学生成绩表用于储存各教学班的选课学生及其成绩功能模块设计(1)所有用户都可以使用“系统”和“帮助”菜单。包括“重新登录”(ui_login.py,重新登录)、“修改密码”(ui_change_password.py,修改密码)、“退出系统”(2)教务员角色可以使用“教务”菜单,包括“用户管理”(ui_user.py,管理用户信息)、“课程管理”(ui_course.py,管理课程信息)、“开课计划”(ui_jxb.py,管理开课计划,即教学班)(3)学生角色可以使用“学生”菜单,包括“学生选课”(ui_student.py,查看、选课或退选课程)(4)教师角色可以使用“教师”菜单,包括“成绩登录”(ui_teacher.py,查看所教授的教学班信息和登录学生成绩)教务管理系统的功能模块及执行流程数据模块API设计及实现(1)数据模块API设计及实现(2)【例CS17.1】教务管理系统数据模块data.py的实现【例CS17.2】教务管理系统登录模块ui_login.py的实现【例CS17.3】教务管理系统主界面模块ui_main.py的实现【例CS17.4】教务管理系统修改密码模块ui_change_password.py的实现【例CS17.5】教务管理系统用户管理模块ui_user.py的实现【例CS17.6】教务管理系统课程管理模块ui_course.py的实现【例CS17.7】教务管理系统开课计划模块ui_jxb.py的实现【例CS17.8】教务管理系统学生选课管理模块ui_student.py的实现【例CS17.9】教务管理系统教师登录成绩模块ui_teacher.py的实现【例CS17.10】教务管理系统主模块jwxt_main.py的实现教务管理系统的实现教务管理系统的实现界面(1)教务管理系统的实现界面(2)教务管理系统的实现界面(3)案例研究2:基于MySQL的库存管理系统本章的案例研究2帮助读者深入了解开发数据库应用程序的思维和流程本章第二个案例研究使用面向对象和MySQL数据库技术,重构第10章“基于模块的库存管理系统”的案例研究,帮助读者深入了解基于MySQL的Python应用程序开发流程案例研究的解题思路和源代码等以电子版形式提供,具体请扫描教程中的二维码库存管理系统数据库设计(1)产品信息(Products)。产品信息表用于储存产品信息(2)货架位置(Locations)。货架位置表用于仓库中的货架位置(3)商品库存信息表(Items)。商品库存信息表用于商品信息(货架上的产品)库存管理系统API设计库存管理系统设计为三个模块文件,即data.py、ui.py和main.py库存管理系统data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论