版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章数据库编程第12章数据库编程了解数据库的相关概念及其关键特性。掌握SQL语言的基本语法和用法。学会安装与配置MySQL数据库。熟悉MySQL数据库的基本操作。掌握使用Python连接MySQL并执行SQL语句进
行数据管理。主要内容12.1数据库基础12.2SQL基础12.3MySQL数据库12.4Python的MySQL编程12.5应用案例:用户注册登录12.6上机实践:设计学生信息管理系统12.1数据库基础12.1数据库基础5理解数据库的基本概念、DBMS功能及关系型数据库的核心要素。
先定一个小目标!数据库(DataBase,简称DB)数据库是一个长期存储在计算机内的、有组织的、可共享的数据集合。其主要特性如下。(1)结构化:数据以结构化的形式存储,便于查询和管理。(2)共享性:支持多用户并发访问,实现数据资源共享。(3)持久性:数据长期存储在计算机系统中,不随程序的结束而消失,确保数据的持续可用性。数据库基础6数据库管理系统(DataBaseManagementSystem,简称DBMS)数据库管理系统是位于用户和操作系统之间的软件层,负责对数据库进行统一的管理和控制。它为用户和应用程序提供访问数据库的方法,并确保数据的安全性和完整性。常见的DBMS有MySQL、Oracle、SQLServer和SQLite等。DBMS的主要功能如下。(1)数据定义:定义数据库中的数据结构和对象,如创建表、视图、索引等。(2)数据操纵:对数据进行插入、查询、更新和删除等操作,通常使用SQL语句实现。(3)数据控制:维护数据的安全性、完整性和一致性,包括权限管理、事务处理等。数据库基础7数据库系统(DataBaseSystem,简称DBS)数据库系统是在计算机系统中引入数据库后的整体架构,结合了计算机软硬件工具,为数据的存储、管理、处理和维护提供了全面的解决方案。其主要组成部分如下。(1)计算机硬件:提供数据库运行的硬件基础。(2)数据库:存储数据的结构化集合。(3)数据库管理系统:负责数据库的创建、管理和维护。(4)数据库应用程序:基于DBMS开发的,用于实现特定业务功能的程序。(5)用户:指使用数据库的人员,包括数据库管理员(DBA)、应用程序员、系统分析员和终端用户等。数据库基础8在数据库系统中,各层次软件之间的相互关系,如下图所示。数据库基础9关系型数据库关系型数据库是基于关系模型的数据库系统。在关系型数据库中,数据被组织成一系列相互关联的表格。这些表格通过特定的关系(如主键和外键)相互关联,形成一个结构化的数据集合。数据库基础10关系型数据库关系型数据库的常用术语包括。(1)关系(Relation):一个关系对应一张二维表,由行和列组成。(2)记录(Record):表中的每一行数据被称为一个记录或元组。(3)字段(Field):表中的每一列数据被称为一个字段或属性。(4)主键(PrimaryKey):用于唯一标识表中每条记录的关键字段,可以由单个或多个字段组合而成。主键的值必须是唯一的,且不能为空。数据库基础1112.2SQL基础结构化查询语言(StructuredQueryLanguage,简称SQL)结构化查询语言是关系型数据库管理系统的标准语言。它为用户提供了一个统一且标准的接口,用于访问、查询、更新和管理关系数据库中的数据。SQL的使用方式主要有以下两种。(1)联机交互使用:在数据库管理系统的可视化界面或命令行界面直接输入SQL命令并执行。这种方式适合练习和测试SQL命令。(2)嵌入高级编程语言:将SQL语句嵌入到如Python、Java等高级编程语言中,用于开发数据库应用程序。这种方式使得开发者能够利用SQL的强大功能,在应用程序中实现对数据库的复杂操作。SQL基础1312.2.1数据库与表的创建14掌握在数据库中创建数据库和表的基本语法及操作步骤。
先定一个小目标!数据库作为数据的集合,提供了数据的组织和管理基础;而表则是数据库的基本构成单元,用于存储和管理具体的数据记录。数据库与表的创建15创建数据库的语法格式如下。在MySQL环境中,创建一个名为stu_db的数据库。创建数据库16CREATEDATABASE数据库名称;创建数据库后,为了在该数据库中执行操作,需要选择它作为当前工作数据库。选择数据库的语法格式如下。选择stu_db作为当前工作数据库。创建数据库17USE数据库名称;创建表时,需定义表的列、数据类型以及相关的约束条件。创建表的语法格式如下。创建表18CREATETABLE表名称(<字段名称1><数据类型>[约束条件],<字段名称2><数据类型>[约束条件],...);在stu_db数据库中创建一个名为students的学生信息表,其字段结构如下表所示。创建表19字段名描述数据类型字段属性Sno学号INT主键Sname姓名VARCHAR(20)不允许为空Sgender性别CHAR(2)默认值为“男”Sage年龄TINYINT不允许为空Sdir系别VARCHAR(50)不允许为空创建一个名为students的学生信息表。创建表后,可以使用DESC或DESCRIBE命令查看表的结构。查看students表的结构。创建表2012.2.2插入、修改和删除表中的数据21掌握在数据库表中插入、修改和删除数据的基本SQL语句及操作。
先定一个小目标!数据库中的数据经常需要进行更新和维护。在成功创建数据库和表之后,接下来将介绍如何高效地处理这些数据。插入、修改和删除表中的数据22当需要在数据库表中添加新记录时,可以使用INSERTINTO语句,其语法格式如下。INSERT语句的语法格式说明如下。(1)字段列表的顺序应与值的列表顺序相对应。(2)非空(NOTNULL)和主键字段在插入时必须提供数据。(3)如果为所有列插入数据,可以省略字段列表。插入数据23INSERTINTO表名称[(字段1[,字段2,...,字段n])]VALUES(值1[,值2,...,值n]);当students表被创建后,使用INSERTINTO语句向表中添加数据。插入数据24要修改数据库表中已存在的数据,可以使用UPDATE语句,其语法格式如下。UPDATE语句的语法格式说明如下。(1)SET子句用于指定要修改的字段及其新值。(2)WHERE子句用于指定应更新哪些记录。如果省略此子句,将更新表中的所有记录。修改数据25UPDATE表名称SET字段1=表达式1[,...,字段n=表达式n][WHERE<条件>];修改students表中的数据,将姓名为“李华”的学生的年龄更改为21岁。修改数据26要从数据库表中删除数据,可以使用DELETEFROM语句,其语法格式如下。DELETE语句的语法格式说明如下。(1)结合WHERE子句,可以精确地删除满足特定条件的记录。(2)如果省略WHERE子句,将删除表中的所有记录。删除数据27DELETEFROM表名[WHERE<条件>];删除students表中名为“郭瑶”的学生的记录。注意:删除操作是不可逆的。在执行删除操作之前,请务必确认要删除的数据。删除数据2812.2.3数据查询29掌握使用SELECT语句进行基本查询、条件查询、分类汇总查询及结果排序的方法。
先定一个小目标!在数据库操作中,查询是一项核心功能,它允许用户从数据库表中检索出所需的信息。SQL中的SELECT语句是实现这一功能的主要工具,其语法格式如下。数据查询30SELECT[ALL|DISTINCT]<列名|列表达式>[,<列名|列表达式>]…FROM<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][GROUPBY<列名>[HAVING<条件表达式>]][ORDERBY<列名>[ASC|DESC]];SELECT语句的语法格式说明如下。(1)SELECT子句:指定查询结果中要显示的列或列表达式。使用DISTINCT关键字可去除结果中的重复行。(2)FROM子句:指定查询的数据来源表或视图,可以是一个或多个。(3)WHERE子句:过滤结果,只返回满足条件的行。(4)GROUPBY子句:将结果按指定列分组,常与统计函数一起使用。(5)HAVING子句:在分组后过滤结果,只返回满足条件的组。(6)ORDERBY子句:对查询结果进行排序。数据查询31基本查询用于检索表中的指定列数据。查询students表的全部数据。查询students表的学号Sno和姓名Sname信息。基本查询32条件查询通过WHERE子句来过滤结果,只返回满足特定条件的行。查询students表中所有年龄大于20岁的学生姓名。条件查询33分类汇总查询通常用于统计和分析数据,通过GROUPBY子句和统计函数来实现。常用的统计函数如下表所示。分类汇总查询34字段名说明AVG(列名)统计列的平均值。例如,求平均成绩为AVG(成绩)COUNT(*)统计记录的总数SUM(列名)统计列的总和。例如,求总分为SUM(成绩)MAX(列名)统计列的最大值。例如,求最高分为MAX(成绩)MIN(列名)统计列的最小值。例如,求最低分为MIN(成绩)查询students表中各个专业的学生人数。以上代码使用GROUPBY子句按专业对学生进行分组,并通过COUNT(*)函数计算每个专业的学生人数。分类汇总查询35查询students表中哪些专业的学生人数超过两人。以上代码使用HAVING子句进一步过滤分组后的结果,只返回学生人数超过两人的专业及其对应的学生人数。分类汇总查询36使用ORDERBY子句可以对查询结果进行排序。关于ORDERBY子句的一些注意事项如下。(1)当SQL查询语句中同时包含多个子句时(如WHERE、GROUPBY、HAVING、ORDERBY),ORDERBY子句必须位于最后。(2)在ORDERBY子句中,可以使用列的别名或列的实际名称进行排序。(3)默认情况下,ORDERBY子句按照升序(ASC)排序。如果希望按照降序排序,需要明确指定DESC。查询结果排序37查询student表中女生的姓名和专业,并按学号降序排列。以上代码首先使用WHERE子句筛选出性别为“女”的学生。然后,使用SELECT子句选择了学生的姓名、专业和学号,并为它们分别指定了别名“姓名”、“专业”和“学号”。最后,使用ORDERBY子句按照“学号”的降序(DESC)排列查询结果。查询结果排序3812.3MySQL数据库MySQL是一个功能强大的关系型数据库管理系统(RDBMS),最初由瑞典的MySQLAB公司开发,后被甲骨文公司收购。MySQL凭借其卓越的性能、易用性、稳定性以及开源免费的优势,成为了当下最流行的关系型数据库管理系统之一。MySQL数据库4012.3.1MySQL数据库的下载与安装41学会从MySQL官网下载MySQL数据库系统,成功安装并完成基本配置。
先定一个小目标!打开浏览器,访问MySQL的官方网站下载页面:/downloads/installer/,获取MySQL数据库的安装软件。安装软件下载42如下图所示,在MySQLInstaller8.0.37的界面中,用户可以选择两个版本:mysql-installer-web-community-.msi(在线安装版)和mysql-installer-community-.msi(离线安装版)。鉴于网络连接的稳定性和安装效率,推荐选择离线安装版。单击离线安装版对应的“Download”按钮开始下载。安装软件下载43以在Windows11操作系统下安装MySQL8.0版为例,安装步骤如下。(1)双击下载的“mysql-installer-community-.msi”文件,启动MySQLInstaller安装向导,弹出如下图所示界面。系统进入“ChoosingaSetupType”(选择安装类型)窗口,该窗口提供了如下四种安装类型供用户选择。安装步骤44选择“Full”进行完整安装以在Windows11操作系统下安装MySQL8.0版为例,安装步骤如下。(2)进入“Installation”(安装)窗口,单击“Execute”按钮,开始安装MySQL文件。安装完成后,在“Status”(状态)列将显示“Complete”(安装完成)。安装步骤45安装MySQL8.0后,通常需要进行一些基本配置。(1)选择适合使用场景的“ConfigType”(配置类型),初学者常选“DevelopmentComputer”(开发计算机)。(2)确认TCP/IP连接方式已启用并默认使用端口号3306。(3)选择“AuthenticationMethod”(授权方式),推荐使用“UseStrongPasswordEncryptionforAuthentication”,这是基于SHA256加密的新授权方式。(4)在“AccountsandRoles”(账号和角色)部分,为root账户设置强密码,并根据需要创建其他账户。(5)将MySQL服务配置为Windows服务,以便通过服务管理工具进行管理,并可选择在系统启动时自动运行MySQL服务。完成这些步骤后,MySQL服务器将配置完成并可以开始使用。MySQL8.0的配置4612.3.2MySQL服务器的启动、关闭和登录47掌握MySQL服务器的启动、关闭方法,并能通过命令行客户端和命令提示符两种方式登录MySQL服务器。
先定一个小目标!在成功安装MySQL数据库系统之后,启动MySQL服务器是开始数据库操作的首要步骤。同样,在不使用MySQL时,正确地关闭服务器能够节省系统资源并确保安全性。此外,登录MySQL服务器是进行数据库管理、查询和修改等操作的基础。MySQL服务器的启动、关闭和登录48MySQL安装和配置完成后,需确保服务器进程已启动,才能通过客户端工具登录并进行数据库操作。启动和关闭MySQL服务器的操作步骤如下。(1)检查MySQL服务状态单击“开始”菜单,在搜索框中输入“services.msc”命令并按“Enter”键,打开“服务”窗口。在服务列表中,找到MySQL服务(通常名为“MySQL”或带有版本号),检查其状态是否为“正在运行”。如未运行,可右键单击该服务项,选择“启动”来手动启动MySQL服务器。MySQL服务器的启动和关闭49(2)更改MySQL服务的启动类型如需更改MySQL服务的启动类型,可以在“服务”窗口中,右键单击MySQL服务,选择“属性”命令。找到“启动类型”下拉列表,选择服务的启动方式,如“自动”、“手动”或“禁用”。(3)关闭MySQL服务器如需关闭MySQL服务器,可在“服务”窗口中找到MySQL服务并右键单击,选择“停止”选项。找到“服务状态”栏,单击“停止”按钮,即可停止MySQL服务的运行。MySQL服务器的启动和关闭50在Windows操作系统中,两种常见方式登录MySQL服务器如下。(1)使用MySQL命令行客户端单击开始菜单中的“MySQL”文件夹下的“MySQLServer8.0CommandLineClient”,打开MySQL8.0CommandLineClient窗口。在提示输入密码时,输入安装时设置的root账户密码。当出现“mysql>”提示符时,表示已经成功登录MySQL服务器。MySQL服务器登录51在Windows操作系统中,两种常见方式登录MySQL服务器如下。(2)通过“命令提示符”窗口通过“命令提示符”窗口登录MySQL服务器的步骤如下。①单击“开始”菜单,在搜索框中输入“cmd”命令并按“Enter”键,打开“命令提示符”窗口。②输入“cdC:\ProgramFiles\MySQL\MySQLServer8.0\bin”命令并按“Enter”键,进入MySQL的bin目录。③在bin目录下,输入“mysql-uroot-p”命令并按“Enter”键,系统提示“Enterpassword:”时,输入root账户密码,当出现“mysql>”提示符时,表示已经成功登录MySQL服务器。MySQL服务器登录5212.4Python的MySQL编程Python通过pymysql模块与MySQL数据库进行交互,支持数据的存储、查询和管理等操作。本节将介绍pymysql模块的安装方法,以及如何使用它来进行数据库编程。Python的MySQL编程5412.4.1安装pymysql模块55学会使用pip命令安装pymysql模块,并验证其是否成功安装。
先定一个小目标!使用pymysql模块与MySQL数据库进行交互之前,需要确保已经安装了该模块。安装pymysql模块的步骤如下。1.打开命令行工具根据操作系统的不同,选择相应的命令行工具。在Windows系统上,可以使用命令提示符(CMD)或PowerShell。在macOS或Linux系统上,则使用终端(Terminal)。2.执行安装命令在命令行窗口中,输入以下命令并按回车键执行。3.验证安装安装完成后,可通过以下命令来查看已安装的Python包列表,确认pymysql模块及其版本号。安装pymysql模块5612.4.2访问数据库的步骤57掌握使用pymysql模块访问MySQL数据库的基本步骤。
先定一个小目标!使用Python操作MySQL数据库时,为确保能够安全、有效地连接到数据库并执行各种数据库操作,需要遵循一定的步骤。访问MySQL数据库并执行相关操作的基本步骤如下。1.导入pymysql模块为了与MySQL数据库进行交互,需要导入pymysql模块,语法格式如下。访问数据库的步骤58importpymysql2.建立数据库连接使用pymysql.connect()函数建立与MySQL数据库的连接。该函数接受多个参数,用于指定连接的各种属性,其语法格式如下。访问数据库的步骤59数据库连接对象=pymysql.connect(host='主机名',user='用户名',password='密码',database='数据库名',port=3306,charset='utf8mb4',connect_timeout=10,autocommit=False)pymysql.connect()函数常用的参数如下表所示。注意:在使用pymysql.connect()函数时,必须提供host、user、password和database这四个参数的有效值,以便成功连接到MySQL数据库。其他参数可以根据需要进行设置。访问数据库的步骤60参数说明host数据库服务器地址。默认为None,表示使用本地主机(localhost)user数据库用户名。需要显式指定用户名password数据库用户密码。需要显式指定密码database要连接的数据库名。需要显式指定数据库名port端口号,默认为3306,这是MySQL的默认端口charset连接数据库的字符编码。通常建议设置为'utf8mb4'以支持全字符集connect_timeout连接数据库的超时时间(秒)。默认为10秒autocommit是否自动提交事务,默认为False,表示需要手动提交事务3.创建游标对象通过调用连接对象的cursor()方法,创建一个游标对象。其语法格式如下。访问数据库的步骤61游标对象=数据库连接对象.cursor()4.执行SQL命令使用游标对象的execute()方法,可以执行SQL语句。对于非SELECT语句,此方法返回受影响的行数。其语法格式如下。调用execute()方法执行SQL语句的具体方法如下表所示。注意:对于SELECT查询,execute()方法本身不返回查询结果,而是将结果集存储在游标对象中。访问数据库的步骤62具体方法说明游标对象.execute(sql)执行一条SQL语句游标对象.execute(sql,parameters)执行一条带参数的SQL语句游标对象.executemany(sql,parameters)执行多条带参数的SQL语句游标对象.execute(SQL语句)5.获取查询结果获取游标查询结果的具体方法如下表所示。访问数据库的步骤63具体方法说明游标对象.fetchone()获取结果集的下一条记录,无数据时返回None游标对象.fetchmany(n)获取结果集中的n条记录,无数据时返回空list游标对象.fetchall()获取结果集中的所有记录,无数据时返回空list游标对象.rowcount获取上一个execute()操作影响的行数(对于非SELECT语句)6.提交或回滚事务(1)提交数据库如果执行的SQL命令涉及到更改数据库状态的操作(如INSERT、UPDATE、DELETE),需要使用commit()方法来提交事务,使更改生效。commit()方法语法格式如下。(2)回滚数据库如果在执行过程中遇到错误,可以使用rollback()方法回滚事务,撤销所有未提交的更改。rollback()语法格式如下。访问数据库的步骤64数据库连接对象.commit()数据库连接对象.rollback()7.关闭连接和游标最后,需要关闭游标和数据库连接,以释放资源。(1)关闭游标对象,其语法格式如下。(2)关闭数据库连接对象,其语法格式如下。访问数据库的步骤65游标对象.close()数据库连接对象.close()12.4.3创建数据库和表66理解并掌握在Python中使用pymysql模块创建数据库和表的方法。
先定一个小目标!使用Python程序在MySQL中创建一个名为stu_db的数据库。创建数据库671importpymysql2
3#建立与MySQL服务器的连接4connection=pymysql.connect(host='localhost',user='root',password='123456')5try:6cursor=connection.cursor()#创建一个游标对象7cursor.execute("CREATEDATABASEIFNOTEXISTSstu_db;")#执行SQL语句8mit()#提交事务9print('Databasecreatedsuccessfully')10cursor.execute("SHOWDATABASES;")#显示所有的数据库11print('Alldatabases:',cursor.fetchall())12exceptExceptionase:13print(f'Anerroroccurred:{e}')14finally:15cursor.close()#关闭游标16connection.close()#关闭连接代码运行结果如下。创建数据库68在stu_db数据库中,创建一个名为students的学生信息表。创建表691importpymysql2
3#连接到MySQL服务器和stu_db数据库4connection=pymysql.connect(host='localhost',user='root',password='123456',database='stu_db')5try:6cursor=connection.cursor()7#定义创建表的SQL语句
8sql="""9CREATETABLEstudents(SnoINTPRIMARYKEY,SnameVARCHAR(20)NOTNULL,SgenderCHAR(2)DEFAULT'男',SageTINYINTNOTNULL,SdirVARCHAR(50)NOTNULL)10"""11cursor.execute(sql)12mit()13print('Tablecreatedsuccessfully')14cursor.execute("SHOWTABLES;")#显示stu_db数据库中的所有表15print('Alltablesinstu_db:',cursor.fetchall())16exceptExceptionase:17print(f'Anerroroccurred:{e}')18finally:19cursor.close()20connection.close()代码运行结果如下。代码执行后,可通过MySQL命令行客户端验证students表否已成功创建并查看其结构。查看结果如右图所示。创建表7012.4.4数据库的插入、更新、删除和查询71理解并掌握使用pymysql模块进行数据库的插入、更新、删除和查询操作的方法。
先定一个小目标!在成功创建了数据库和表之后,可以使用SQL语句执行数据库中的核心操作:插入、更新、删除和查询记录。数据库的插入、更新、删除和查询72pymysql模块提供了向数据库插入数据的功能,包括单条数据插入和多条数据插入。(1)插入单条数据当需要向数据库表中插入单条数据时,可以使用游标对象的execute()方法。这个方法需要两个参数:一个SQL插入语句和一个包含实际数据值的元组。SQL语句中的占位符(如%s)将被元组中的对应值所替换。(2)插入多条数据当需要一次性插入多条数据时,可以使用游标对象的executemany()方法。这个方法同样需要两个参数:一个SQL插入语句和一个包含多个元组的列表。列表中的每个元组代表一条待插入的数据记录。插入数据73向students表中添加学生信息。插入数据741importpymysql2
3connection=pymysql.connect(host='localhost',user='root',password='123456',database='stu_db')4try:5cursor=connection.cursor()6#插入单条数据的SQL语句7insert_single_SQL="INSERTINTOstudents(Sno,Sname,Sgender,Sage,Sdir)VALUES(%s,%s,%s,%s,%s)"8params_single=(2024001,'李华','男',20,'计算机系')9cursor.execute(insert_single_SQL,params_single)10#插入多条数据的SQL语句11insert_multiple_SQL="INSERTINTOstudents(Sno,Sname,Sgender,Sage,Sdir)VALUES(%s,%s,%s,%s,%s)"12params_multiple=[(2024002,'赵佳','女',19,'计算机系'),(2024003,'郭瑶','女',19,'数学系'),13(2024004,'陈亮','男',21,'数学系'),(2024005,'熊静','女',20,'计算机系')]14cursor.executemany(insert_multiple_SQL,params_multiple)15mit()16print("Recordsinsertedsuccessfully")17exceptExceptionase:18print("Anerroroccurred:",e)19finally:20cursor.close()21connection.close()代码运行结果如下。代码执行后,可通过MySQL命令行客户端查询students表的数据。查询结果如下图所示。插入数据75当需要修改已存在的记录时,可以使用UPDATE语句,并配合WHERE子句来定位需要更新的记录。修改数据76修改students表中的记录,将名为“赵佳”的学生的系名更改为“数学系”。修改数据771importpymysql2
3connection=pymysql.connect(host='localhost',user='root',password='123456',database='stu_db')4try:5cursor=connection.cursor()6update_SQL="UPDATEstudentsSETSdir=%sWHERESname=%s"#更新数据的SQL语句7params=('数学系','赵佳')8cursor.execute(update_SQL,params)#执行更新操作9mit()10print("Recordupdatedsuccessfully")11select_SQL="SELECT*FROMstudentsWHERESname=%s"#查询更新后的记录12cursor.execute(select_SQL,('赵佳',))13print("修改后:",cursor.fetchall())14exceptExceptionase:15print("Anerroroccurred:",e)16finally:17cursor.close()18connection.close()代码运行结果如下。代码执行后,可通过MySQL命令行客户端来验证更新的结果。查询结果如下图所示。修改数据78当需要删除表中的某些记录时,可以使用DELETE语句,并通过WHERE子句来指定删除的条件。删除数据79删除students表中名为“赵佳”的学生的记录。删除数据801importpymysql2
3connection=pymysql.connect(host='localhost',user='root',password='123456',database='stu_db')4try:5cursor=connection.cursor()6Sname='赵佳'#定义要删除的学生的姓名7delete_sql="DELETEFROMstudentsWHERESname=%s"#构建删除语句8select_sql="SELECT*FROMstudentsWHERESname=%s"#构建查询语句9cursor.execute(select_sql,(Sname,))#执行查询语句,获取删除前的数据10print("删除前:",cursor.fetchall())11cursor.execute(delete_sql,(Sname,))#执行删除语句12mit()#提交事务13cursor.execute(select_sql,(Sname,))#再次执行查询语句,获取删除后的数据14print("删除后:",cursor.fetchall())15exceptExceptionase:16print("Anunexpectederroroccurred:",e)17finally:18cursor.close()19connection.close()运行结果如下。从运行结果可以看出,已成功地删除了姓名为“赵佳”的学生信息。删除数据81在数据库编程中,查询数据是最常见的操作之一。下面将通过代码展示如何使用Python从MySQL数据库的students表中,根据用户输入的性别查询相应的学生信息。查询数据82根据用户键盘输入的性别,从students表中查询出相应的学生信息。查询数据831importpymysql2
3connection=pymysql.connect(host='localhost',user='root',password='123456',database='stu_db')4try:5cursor=connection.cursor()6gender=input("请输入要查询的性别(男/女):")#获取用户输入的性别7sql="SELECT*FROMstudentsWHERESgender=%s"#构建查询语句8cursor.execute(sql,(gender,))#执行查询语句9results=cursor.fetchall()#检索查询结果10ifresults:11print("查询结果:")12forrowinresults:
13print(row)14else:15print("没有找到符合条件的学生信息。")16exceptExceptionase:17print("Anunexpectederroroccurred:",e)18finally:19cursor.close()20connection.close()运行结果如下。查询数据8412.5应用案例:用户注册登录应用案例:用户注册登录用户注册登录程序可以实现访问控制,确保只有经过身份验证的用户才能访问特定资源和执行特定操作。同时,通过保存用户个性化配置和数据,提供更好的用户体验。此外,用户注册登录功能还有助于保护用户数据的安全性,通过加密密码和实施安全措施,减少数据泄露和未经授权访问的风险。86思考:如何通过Python结合数据库实现安全、高效的用户注册与登录系统?
【分析】实现用户注册登录程序,需要考虑以下几个方面。(1)连接数据库:pymysql.connect()函数用于创建数据库连接对象,需要指定数据库的主机地址、端口号、用户名、密码、数据库名称等参数。(2)生成游标对象:使用cursor()方法得到一个游标,游标可以用来执行SQL语句。(3)执行SQL语句:使用execute()方法执行SQL语句,可以实现包括创建表、插入、更新、删除数据以及执行查询等操作。(4)关闭游标和连接:在使用完数据库资源后,执行关闭游标和连接语句,以释放资源并维护系统的健壮性。应用案例:用户注册登录87【实现】(1)连接数据库,生成游标对象使用pymysql模块建立了与数据库的连接,通过创建游标对象,执行SQL查询,并将查询结果以字典形式返回。应用案例:用户注册登录881importpymysql2#连接数据库3defget_conn():4conn=pymysql.connect(5host='',#数据库服务器的地址6port=3306,#数据库服务器的端口号7user='root',#数据库用户名8password='123456',#数据库密码9database='mytable',#要连接的数据库名称10charset='utf8',#连接的字符集11autocommit=True)#是否自动提交事务12#创建一个游标对象来执行SQL查询13cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)14returnconn,cursor(2)创建用户信息表使用SQL语句来定义用户信息表的结构,通过调用游标对象的execute()方法执行创建表的SQL语句,并通过连接对象的commit()方法提交事务,确保用户信息表的创建操作被持久化保存。应用案例:用户注册登录891#创建用户信息表2defcreate_table(conn,cursor):3"""4conn:用于与数据库建立连接,并进行数据库操作5cursor:用于执行SQL语句并获取结果6"""7#创建用户信息表8create_table_query='''9CREATETABLEIFNOTEXISTSuser(10idINTPRIMARYKEYAUTO_INCREMENT,11usernameVARCHAR(255)NOTNULL,12passwordVARCHAR(255)NOTNULL,13genderENUM('0','1')DEFAULT'0'14)ENGINE=InnoDB15DEFAULTCHARSET=utf8;16'''17cursor.execute(create_table_query)#调用cursor.execute()方法并传入创建表的SQL语句18mit()#提交到数据库执行(3)插入用户记录调用游标对象的execute()方法,分别执行两条用户信息插入语句,将用户记录插入到用户信息表中。应用案例:用户注册登录901#插入用户记录2definsert_records(cursor):3insert_query1='''4INSERTINTOuser(username,password,gender)5VALUES('张三','123','0')6'''7cursor.execute(insert_query1)#使用游标对象cursor执行插入操作的语句8insert_query2='''9INSERTINTOuser(username,password,gender)10VALUES('李四','456','0')11'''12cursor.execute(insert_query2)#插入第二条用户记录(4)注册、登录和退出登录功能通过执行SQL查询语句检查用户名是否已存在。如果用户名不存在,那么利用SQL插入语句将用户信息插入到用户信息表中,并根据注册结果输出相应的提示信息。应用案例:用户注册登录911#实现用户注册功能2defregister(cursor):3username=input('请输入注册的用户名:').strip()4password=input('请输入您的密码:').strip()5gender=input('请输入您的性别(0表示男性,1表示女性):').strip()6#验证用户名是否已经存在7sql='SELECT*FROMuserWHEREusername=%s'#执行了SQL查询8cursor.execute(sql,(username,))9res=cursor.fetchall()#通过cursor.fetchall()方法获取所有查询结果的列表10#判断用户名是否已经存在11ifnotres:12#插入数据13sql='INSERTINTOuser(username,password,gender)VALUES(%s,%s,%s)'14cursor.execute(sql,(username,password,gender))15print('用户:%s注册成功'%username)16else:17print('用户名已存在')检查是否已有用户登录,并查询用户名是否存在、验证密码是否正确。若用户名存在和密码正确,则设置当前登录用户并输出相应提示信息;反之,则出现相应的错误提示。应用案例:用户注册登录921#实现用户登录功能2deflogin(cursor):3globalcurrent_user#检查是否已有用户登录4ifcurrent_user:5print('已登录用户:%s'%current_user)6return7username=input('请输入您的用户名:').strip()8password=input('请输入您的密码:').strip()9#先获取是否存在用户名数据10sql='SELECT*FROMuserWHEREusername=%s'11cursor.execute(sql,(username,))12res=cursor.fetchall()13ifres:14real_dict=res[0]#获取第一个字典15#校验密码16ifpassword==real_dict.get('password'):17current_user=username#设置当前登录用户18print('登录成功')19else:20print('密码错误')21else:22print('用户名不存在')通过设置current_user变量为空来表示用户已退出登录,并输出相应的提示信息。应用案例:用户注册登录93(5)主程序通过创建func_dic字典,实现用户功能选择菜单,用户通过输入编号选择不同的功能进行操作。根据用户的选择,程序会调用相应功能函数来完成相应的操作。应用案例:用户注册登录941func_dic={'1':register,'2':login,'3':logout}2current_user=None#当前登录的用户名3#连接数据库4conn,cursor=get_conn()5#创建表6create_table(conn,cursor)7#插入注册记录8insert_records(cursor)9#执行10whileTrue:11print("""121.注册功能132.登录功能143.退出登录15""")16choice=input('请输入功能编号>>>:').strip()17ifchoiceinfunc_dic:18func_name=func_dic.get(choice)19func_name(cursor)20else:21print('暂时没有当前功能编号')(6)关闭游标和连接关闭游标和数据库连接。应用案例:用户注册登录95上机实践:设计学生信息管理系统实验目的(1)熟练掌握pymysql模块的常用操作。(2)熟练掌握SQL语言的基本语法和常用操作。(3)熟练使用Python连接到数据库,并执行常见的数据库操作。实验要求由于学生信息管理系统可以有效管理和组织学生信息,显著提升操作效率,大幅减少人为错误。现在要求利用Python数据库编程相关知识,设计学生信息管理系统,为用户提供便捷的访问和查询功能。96运行效果学生信息管理系统运行结果如下。上机实践:设计学生信息管理系统97添加学生信息查看所有学生信息1.添加学生信息2.查看所有学生信息3.查看指定学生信息
请输入功能编号>>>:1请输入学生姓名:李四请输入学生学号:2220220079请输入学生年龄:20请输入学生专业:应用统计学学生信息已添加成功!1.添加学生信息2.查看所有学生信息3.查看指定学生信息
请输入功能编号>>>:2ID:1姓名:张三学号:2120220012年龄:21专业:数据科学与大数据技术--------------------ID:2姓名:李四学号:2220220079年龄:20专业:应用统计学--------------------
1.添加学生信息2.查看所有学生信息3.查看指定学生信息
请输入功能编号>>>:3请输入要查询的学生学号:2220220079ID:2姓名:李四学号:2220220079年龄:20专业:应用统计学查看指定学生信息
4. 程序模板请按模板要求,将【代码】替换为Python程序代码。上机实践:设计学生信息管理系统981importpymysql2
3
4#连接数据库5defget_conn():6conn=pymysql.connect(7
【代码1】
#数据库服务器的地址是''8
【代码2】
#数据库服务器的端口号是33069
【代码3】
#数据库用户名是'root'10
【代码4】
#数据库密码是'123456'11
【代码5】
#要连接的数据库名称是'sms'12
【代码6】
#连接的字符集是'utf8'13autocommit=True)#是否自动提交事务14#创建一个游标对象来执行SQL查询15cursor=
【代码7】
(cursor=pymysql.cursors.DictCursor)16returnconn,cursor17
18
4. 程序模板请按模板要求,将【代码】替换为Python程序代码。上机实践:设计学生信息管理系统9919#创建表20defcreate_table(conn,cursor):21"""22conn:用于与数据库建立连接,并进行数据库操作23cursor:用于执行SQL语句并获取结果24"""25#创建学生信息表26create_table_query='''27CREATETABLEIFNOTEXISTSstudents(28idINTPRIMARYKEYAUTO_INCREMENT,29nameVARCHAR(255)NOTNULL,30student_idBIGINTNOTNULLUNIQUE,31ageINT,32majorVARCHAR(255)NOTNULL33)ENGINE=InnoDB34DEFAULTCHARSET=utf8;35'''36
【代码8】
#调用cursor.execute()方法并传入创建表的SQL语句37
【代码9】#提交到数据库执行38
39
4. 程序模板请按模板要求,将【代码】替换为Python程序代码。上机实践:设计学生信息管理系统10040#插入学生记录41definsert_student_records(cursor):42insert_query1='''43#使用SQL插入语句应用到"students"数据库表中44
【代码10】
students(name,student_id,age,major)45VALUES('张三','2120220012','21','数据科学与大数据技术')46'''47
【代码11】
#调用cursor.execute()方法执行插入操作的语句48
49
50#添加学生信息51defadd_student(cursor):52name=input("请输入学生姓名:")53student_id=input("请输入学生学号:")54age=input("请输入学生年龄:")55major=input("请输入学生专业:")56#构建SQL插入语句,将name、student_id、age和major插入到"students"数据库表中57query=【代码12】
58values=(name,student_id,age,major)59cursor.execute(que
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信号设备组调工保密意识强化考核试卷含答案
- 锅炉管阀检修工成果转化竞赛考核试卷含答案
- (天一小高考)山西省2026届高三4月联考(素质评价)政治试卷(含答案详解)
- 轧花工安全宣传水平考核试卷含答案
- 母婴护理员岗前潜力考核试卷含答案
- 片基流延工安全文明考核试卷含答案
- 计算机及外部设备装配调试员持续改进水平考核试卷含答案
- 有色金属矿干燥工班组安全竞赛考核试卷含答案
- 纸箱纸盒制作工班组管理测试考核试卷含答案
- 装配式管廊施工安装验收试题及答案
- 2026年春人教版(2024)八年级下册英语期末检测试卷(含答案)
- T/CECCEDA 1-2025企业管理创新体系要求及实施指南
- 生物统计学5课件
- SB/T 10739-2012商用洗地机技术规范
- GB/T 25085.3-2020道路车辆汽车电缆第3部分:交流30 V或直流60 V单芯铜导体电缆的尺寸和要求
- 五年级下册猜字谜-课件
- 《三年级》数学全集举一反三课件奥数
- 【自考练习题】辽宁工业大学概率论与数理统计真题汇总(附答案解析)
- 青山处处埋忠骨 一等奖-完整版课件
- ERP沙盘模拟企业经营实训教程
- GB∕T 11968-2020 蒸压加气混凝土砌块
评论
0/150
提交评论