当前位置: 首页 > article >正文

练习题:29

目录

Python题目

题目

题目分析

1. 知识点覆盖分析

2. 连接库选择与导入分析

3. 连接步骤与参数分析

4. 数据库操作与连接关闭分析

代码实现

代码解释

1. 导入必要的库

2. 配置数据库连接参数

3. 建立数据库连接

4. 创建游标对象

5. 编写并执行 SQL 查询语句

6. 获取并展示查询结果

7. 关闭游标和数据库连接

8. 异常处理

运行思路

1. 导入库阶段

2. 配置数据库连接参数阶段

3. 建立数据库连接阶段

4. 创建游标对象阶段

5. 编写并执行 SQL 查询语句阶段

6. 获取并展示查询结果阶段

7. 关闭游标和数据库连接阶段

8. 异常处理阶段

结束语

Python题目

题目

简述Python连接MySQL数据库的方法?

题目分析

1. 知识点覆盖分析

这道题目主要考查对 Python 数据库连接操作的理解,特别是针对 MySQL 数据库。需要掌握的知识点包括 Python 中用于数据库连接的相关库、连接数据库的步骤、可能需要的配置信息,以及如何执行简单的数据库操作(如查询、插入等)。

2. 连接库选择与导入分析

  • 库的选择
    在 Python 中,通常使用pymysql库来连接 MySQL 数据库。这个库提供了一系列方法,用于建立连接、执行 SQL 语句等操作,是实现 Python 与 MySQL 交互的重要工具。
  • 库的导入
    要使用pymysql,首先需要在 Python 脚本或交互式环境中导入该库。一般通过import pymysql语句来实现,这使得后续代码能够调用pymysql库中定义的各种类和方法。

3. 连接步骤与参数分析

  • 建立连接的步骤
    • 创建连接对象:使用pymysql.connect()方法来创建一个与 MySQL 数据库的连接对象。这个方法需要传入一些参数来指定数据库的相关信息。
    • 配置连接参数:
      • host:这是 MySQL 服务器的主机地址,例如localhost表示本地服务器。如果数据库服务器在远程网络上,需要提供其实际的 IP 地址或域名。
      • user:用于登录 MySQL 数据库的用户名。
      • password:与用户名对应的密码,用于身份验证。
      • database:要连接的具体数据库名称。如果不指定,可能需要在后续操作中明确指定数据库才能进行有效的查询等操作。
      • port(可选):MySQL 服务的端口号,默认是 3306。如果 MySQL 服务器配置使用了其他端口,需要在这里指定正确的端口值。
    • 获取游标对象:在成功创建连接对象后,需要使用连接对象的cursor()方法获取一个游标(cursor)对象。游标就像是数据库操作的指针,通过它可以执行 SQL 语句并获取结果。

4. 数据库操作与连接关闭分析

  • 数据库操作
    通过游标对象,可以执行各种 SQL 语句。例如,使用execute()方法来执行查询语句(如SELECT)或数据操作语句(如INSERTUPDATEDELETE)。对于查询语句,还可以使用游标对象的fetchall()fetchone()fetchmany()方法来获取查询结果。
  • 连接关闭
    在完成所有数据库操作后,为了释放资源并确保数据库连接的正常关闭,需要依次关闭游标对象和连接对象。这可以通过调用游标对象的close()方法和连接对象的close()方法来实现。如果不关闭连接,可能会导致资源浪费或数据库连接池出现问题。

代码实现

import pymysql

# 连接数据库配置参数
config = {
    "host": "localhost",  # MySQL服务器地址,这里是本地地址,若为远程服务器需填写对应IP
    "user": "root",  # 登录数据库的用户名
    "password": "123456",  # 登录数据库对应的密码
    "database": "test",  # 要连接的数据库名称
    "port": 3306  # MySQL默认端口号,若服务器端口有变动需修改此处
}

try:
    # 建立数据库连接
    connection = pymysql.connect(**config)
    # 创建游标对象,用于执行SQL语句
    cursor = connection.cursor()

    # 编写SQL查询语句,这里查询名为 'users' 表中的所有数据,可按需修改表名及查询条件等
    sql = "SELECT * FROM users"
    # 执行SQL查询语句
    cursor.execute(sql)
    # 获取查询结果,fetchall()获取所有结果集,也可使用fetchone()获取单条结果或fetchmany(n)获取n条结果
    results = cursor.fetchall()
    for row in results:
        print(row)

    # 关闭游标,释放游标资源
    cursor.close()
    # 关闭数据库连接,释放连接资源
    connection.close()
except pymysql.Error as e:
    print(f"连接数据库时出现错误: {e}")

代码解释

1. 导入必要的库

import pymysql

通过这行代码导入pymysql库,它是 Python 中用于连接 MySQL 数据库的常用库,提供了一系列方法和类来方便地实现与 MySQL 数据库的交互操作。

2. 配置数据库连接参数

config = {
    "host": "localhost",  
    "user": "root",  
    "password": "123456",  
    "database": "test",  
    "port": 3306  
}

这里定义了一个字典config,用于存放连接 MySQL 数据库所需的各项参数。

  • host:指定 MySQL 服务器所在的主机地址。localhost表示数据库服务器就在本地机器上,如果数据库服务器运行在其他远程机器上,则需要填写对应的 IP 地址或域名。
  • user:登录 MySQL 数据库所使用的用户名,不同的用户可能具有不同的权限,要确保使用的用户名具有执行所需操作(如查询、插入等)的权限。
  • password:与上述用户名对应的密码,用于验证用户身份,确保只有授权用户能够访问数据库。
  • database:要连接到的具体数据库的名称,MySQL 服务器上通常可以有多个不同用途的数据库,这里明确指定要连接操作的是哪一个数据库。
  • port:MySQL 服务运行的端口号,默认情况下是 3306,不过在某些特殊配置下,服务器可能使用其他端口,此时就需要相应地修改这个参数值。

3. 建立数据库连接

connection = pymysql.connect(**config)

使用pymysql.connect()函数来建立与 MySQL 数据库的连接,通过解包字典config中的参数传递给connect函数。如果连接成功,该函数会返回一个表示数据库连接的对象connection,后续的所有操作(如获取游标、执行 SQL 语句等)都将基于这个连接对象来进行。如果连接出现问题,比如服务器地址错误、用户名或密码不正确等,将会抛出异常。

4. 创建游标对象

cursor = connection.cursor()

从已建立的数据库连接对象connection中获取一个游标对象cursor。游标对象就像是在数据库中进行操作的 “指针”,它可以用来执行具体的 SQL 语句,并处理语句执行后的结果。例如,可以使用游标来执行查询语句获取数据,或者执行插入、更新、删除等语句来修改数据库中的数据。

5. 编写并执行 SQL 查询语句

sql = "SELECT * FROM users"
cursor.execute(sql)
  • 首先定义了一个 SQL 查询语句sql,这里的语句是SELECT * FROM users,表示从名为users的表中查询所有的记录。当然,你可以根据实际需求修改这个查询语句,比如添加WHERE子句来指定筛选条件,或者选择特定的列等。
  • 然后使用游标对象cursorexecute方法来执行这个 SQL 查询语句,将查询请求发送给 MySQL 数据库,数据库会根据语句进行相应的数据检索操作。

6. 获取并展示查询结果

results = cursor.fetchall()
for row in results:
    print(row)
  • 通过游标对象的fetchall方法获取查询语句执行后返回的所有结果集,结果会以元组的形式存储在results变量中,每个元组对应表中的一行记录,元组中的元素依次是该行记录各个列的值。例如,如果users表中有三列(idnameage),那么每个元组可能类似(1, 'John', 25)这样的形式,表示一条用户记录。
  • 接着使用for循环遍历results,并将每一行记录打印出来,这样就可以查看从数据库中查询到的数据内容了。

7. 关闭游标和数据库连接

cursor.close()
connection.close()

在完成对数据库的操作后,为了释放相关的资源(如内存、数据库连接资源等),需要依次关闭游标对象和数据库连接对象。首先调用cursor.close()关闭游标,然后调用connection.close()关闭数据库连接,遵循这样的顺序来确保资源的正确释放和数据库连接的正常关闭,避免出现资源泄漏或者影响数据库服务器性能等问题。

8. 异常处理

except pymysql.Error as e:
    print(f"连接数据库时出现错误: {e}")

整个数据库连接和操作过程被包裹在try-except语句块中,用于捕获在使用pymysql库连接数据库以及执行 SQL 语句过程中可能出现的各种错误。如果出现错误,比如连接被拒绝、SQL 语法错误等,相应的错误信息会被捕获并通过print函数输出显示,方便排查问题所在,而不会导致程序因为未处理的异常而意外崩溃。

运行思路

1. 导入库阶段

import pymysql

当 Python 解释器开始执行代码时,遇到这行 import 语句,它会在 Python 的标准库以及已配置的其他模块搜索路径中查找名为 pymysql 的模块。一旦找到该模块,Python 解释器就会将其加载到内存中,使得后续代码可以调用 pymysql 模块内定义的各种函数、类以及常量等。这个模块是实现与 MySQL 数据库连接及交互操作的基础,若找不到这个模块,后续涉及数据库连接的代码将无法正常运行并会抛出 ModuleNotFoundError 之类的错误。

2. 配置数据库连接参数阶段

config = {
    "host": "localhost",  
    "user": "root",  
    "password": "123456",  
    "database": "test",  
    "port": 3306  
}

Python 解释器执行到这部分代码时,会在内存中创建一个字典对象 config,并按照字典的定义规则依次将各个键值对存入其中。每个键值对对应数据库连接所需的一个参数,比如 host 键对应的值 "localhost" 表示 MySQL 服务器的主机地址信息,告诉程序要去本地机器上查找数据库服务器;user 键对应的值 "root" 是用于登录数据库的用户名;password 键对应的值 "123456" 是与用户名匹配的登录密码,用于验证用户身份,确保只有授权用户能够访问数据库;database 键对应的值 "test" 明确了要连接的具体数据库名称,因为 MySQL 服务器通常可以承载多个不同的数据库,这里指定了操作的目标;port 键对应的值 3306 则是 MySQL 服务运行的默认端口号,若服务器配置使用了其他端口,需要相应修改这个值来确保能正确连接到数据库服务。这些参数配置完成后,就为后续建立数据库连接准备好了必要的信息。

3. 建立数据库连接阶段

connection = pymysql.connect(**config)

执行到这行代码时,Python 解释器会调用 pymysql 模块中的 connect 函数,并将 config 字典中的参数通过解包(** 操作符的作用)的方式传递给 connect 函数。connect 函数内部会根据传入的参数信息尝试与指定的 MySQL 数据库建立连接,其大致操作如下:

  • 首先,它会根据 host 参数值(这里是 "localhost")去查找对应的数据库服务器所在位置,如果是远程地址则会通过网络协议尝试与远程服务器建立通信链路。
  • 然后,使用 user 和 password 参数提供的用户名和密码信息向数据库服务器发起身份验证请求,服务器会验证这些信息是否匹配且用户是否具有相应权限。
  • 接着,根据 database 参数指定的数据库名称,确认要连接到服务器上的具体数据库实例。
  • 最后,如果 port 参数指定的端口号正确,并且前面的验证等步骤都顺利通过,数据库服务器会与 Python 程序建立起一个连接,并返回一个代表这个连接的对象给 Python 程序,该对象被赋值给变量 connection,后续的数据库操作都将基于这个连接对象来进行。若在这个过程中任何一个环节出现问题,比如服务器不可达、用户名或密码错误、数据库不存在等,connect 函数就会抛出异常,程序流程会立即跳转到对应的 except 语句块去处理错误情况(如果有相应的异常处理代码的话)。

4. 创建游标对象阶段

cursor = connection.cursor()

在成功建立数据库连接后,Python 解释器会执行这行代码,通过调用连接对象 connection 的 cursor 方法来创建一个游标对象,并将其赋值给变量 cursor。游标对象在数据库操作中起着关键作用,它相当于一个在数据库内执行操作的 “指针”,可以用来向数据库发送具体的 SQL 语句,并处理语句执行后返回的结果。例如,后续可以通过游标执行查询语句来获取数据,或者执行插入、更新、删除等语句来修改数据库中的数据,它是实现与数据库具体交互的重要工具。

5. 编写并执行 SQL 查询语句阶段

sql = "SELECT * FROM users"
cursor.execute(sql)
  • 编写查询语句
    Python 解释器执行到 sql = "SELECT * FROM users" 这行代码时,会在内存中创建一个字符串对象,其内容为 "SELECT * FROM users",这个字符串代表了一条 SQL 查询语句,意思是从名为 users 的表中查询所有的记录。这里你可以根据实际需求修改这个查询语句,比如添加 WHERE 子句来指定筛选条件,或者选择特定的列等,以实现不同的查询目的。
  • 执行查询操作
    接着执行 cursor.execute(sql) 语句,此时 Python 解释器会调用游标对象 cursor 的 execute 方法,并将之前定义好的 SQL 查询语句字符串作为参数传递进去。游标对象内部会将这个 SQL 语句发送给与之关联的 MySQL 数据库,数据库接收到查询请求后,会按照自身的逻辑对相应的数据表(这里是 users 表)进行检索操作,查找符合查询条件(这里是查询所有记录,因为使用了 * 通配符)的数据行,这个过程是在数据库服务器端进行的,Python 程序会等待数据库处理完毕并返回结果。

6. 获取并展示查询结果阶段

results = cursor.fetchall()
for row in results:
    print(row)
  • 获取查询结果
    当游标对象向数据库发送的查询语句执行完成后,执行 results = cursor.fetchall() 语句,Python 解释器会调用游标对象 cursor 的 fetchall 方法,这个方法会从数据库服务器获取之前查询操作返回的所有结果集。数据库会将查询到的数据以一定的格式(在这里是按照表中列的顺序,每行数据作为一个元组,所有行组成一个元组列表的形式)返回给游标对象,游标对象再将这些数据传递给 Python 程序,最终这些结果数据被存储在变量 results 中,形成一个包含多个元组的列表结构,每个元组对应表中的一行记录,元组中的元素依次是该行记录各个列的值。例如,如果 users 表中有三列(idnameage),那么每个元组可能类似 (1, 'John', 25) 这样的形式,表示一条用户记录。
  • 展示查询结果
    随后进入 for row in results: 循环,Python 解释器会依次取出 results 列表中的每个元组元素,并赋值给变量 row,在每次循环中执行 print(row) 语句,将当前行的数据元组输出到控制台,这样就能直观地展示从数据库中查询到的所有数据内容了。通过不断循环,所有查询到的记录都会依次显示出来,方便查看和分析查询结果。

7. 关闭游标和数据库连接阶段

cursor.close()
connection.close()

在完成对数据库的查询操作以及展示结果后,为了释放相关的系统资源(如内存资源、数据库连接资源等),避免资源浪费以及可能出现的潜在问题(比如过多未关闭的连接可能导致数据库连接池资源耗尽等情况),需要执行关闭游标和数据库连接的操作。

  • 关闭游标
    执行 cursor.close() 语句时,Python 解释器会调用游标对象 cursor 的关闭方法,这个方法会释放游标对象占用的相关资源,并通知数据库服务器游标使用完毕,内部会进行一些清理操作,确保游标相关的资源被正确回收。
  • 关闭数据库连接
    接着执行 connection.close() 语句,Python 解释器调用连接对象 connection 的关闭方法,该方法会与数据库服务器进行交互,告知服务器连接即将关闭,然后释放与该连接相关的所有系统资源,完成数据库连接的正常关闭流程。

8. 异常处理阶段

except pymysql.Error as e:
    print(f"连接数据库时出现错误: {e}")

整个数据库连接和操作的代码块被包裹在 try-except 语句结构中,目的是捕获在使用 pymysql 库连接数据库以及执行 SQL 语句过程中可能出现的各种错误。如果在前面的任何一个步骤(如建立连接、执行查询语句等)中出现了 pymysql.Error 类型的异常(这个类型涵盖了 pymysql 库在数据库操作中可能出现的多种具体错误情况,比如连接被拒绝、SQL 语法错误等),程序流程会立即跳转到这个 except 语句块中执行相应的错误处理操作。在这里,通过 print(f"连接数据库时出现错误: {e}") 语句,会将捕获到的错误信息以格式化字符串的形式输出到控制台,方便开发人员查看具体的错误原因,进而排查和解决问题,避免程序因为未处理的异常而意外崩溃,增强了程序的健壮性。

结束语

希望以上对 Python 连接 MySQL 数据库的题目分析、代码实现以及运行思路的阐述,能让你清晰地掌握这一关键技能。数据库连接是构建强大后端应用的基石,无论是开发网站、数据分析工具还是其他各类数据驱动的应用,都离不开与数据库的高效交互。在实际应用中,你可以根据具体的业务需求,进一步扩展和优化这些代码,例如执行更复杂的查询语句、处理事务、优化连接池配置等,以满足不同场景下的数据处理要求。如果在后续的学习或实践过程中遇到任何问题,欢迎随时回来查阅这些内容或者向我提问。祝你在编程学习的道路上不断进步,顺利攻克更多的技术难题,开启精彩的数据库编程之旅!


http://www.kler.cn/a/461285.html

相关文章:

  • Linux Shell 脚本编程基础知识篇—awk的条件判断(3)
  • GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)
  • 机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
  • redis的集群模式与ELK基础
  • xadmin后台首页增加一个导入数据按钮
  • 集线器,交换机,路由器,mac地址和ip地址知识记录总结
  • naive ui 使用地址记录
  • 人工智能知识分享第二天-机器学习之KNN算法
  • 2024终章---愿昭昭如愿,愿岁岁安澜
  • 大模型的实践应用34-大模型LLama3的预训练的全流程介绍,包括:数据收集处理、模型架构与初始化,训练策略等
  • STM32G0B1 can Error_Handler 解决方法
  • tcpdump指南(1)
  • KMP 2024 年总结,Kotlin 崛起的一年
  • 【题解】—— LeetCode一周小结52
  • Node.js详细安装教程
  • CPT203 Software Engineering 软件工程 Pt.6 软件管理(中英双语)
  • LabVIEW冷却风机性能测试系统
  • LeetCode3045.统计前后缀下标对II
  • 003:如何理解 CNN 中的 RGB 图像和通道?
  • C++:单例模式
  • DevOps与自动化运维的深度结合实践
  • mybatis 和 mybatisPlus 兼容性问题
  • 探索SYNBO协议基于社区基金池的社区代理人模式——Alpha Broker
  • 破解 JVM 上的第三方 API
  • 如何在 Vue 2 中使用 Swiper 5.4.5 处理静态与后端数据不能切换问题
  • 【循环神经网络】RNN介绍