实训5 python连接mysql数据库

张开发
2026/6/10 11:20:34 15 分钟阅读
实训5 python连接mysql数据库
Python连接MySQL数据库实训手册一、实训目的掌握Python中连接MySQL数据库的基本方法。学习使用Python操作MySQL数据库的增、删、改、查CRUD操作。熟悉使用PyMySQL或mysql-connector-python库进行数据库编程。提高综合应用能力为后续开发Web应用或数据处理项目打下基础。二、实训环境准备1. 软件环境操作系统Windows / macOS / LinuxPython版本3.6 及以上数据库MySQL 5.7 或以上版本2. 安装必备工具1安装Python确保已安装Python建议使用Python 3.8可通过命令行验证python--version2安装MySQL数据库下载地址https://dev.mysql.com/downloads/mysql/安装完成后启动MySQL服务并设置root用户密码。3安装Python数据库驱动在命令行中运行以下命令安装PyMySQL推荐初学者使用pipinstallPyMySQL若使用mysql-connector-python可运行pipinstallmysql-connector-python三、准备工作创建测试数据库与表1. 登录MySQL并创建数据库打开命令行输入以下命令登录MySQLmysql-uroot-p输入密码后进入MySQL命令行执行如下SQL语句-- 创建数据库CREATEDATABASEIFNOTEXISTStest_db;-- 使用数据库USEtest_db;-- 创建学生表CREATETABLEstudents(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50)NOTNULL,ageINT,genderVARCHAR(10),gradeDECIMAL(5,2));-- 插入测试数据INSERTINTOstudents(name,age,gender,grade)VALUES(张三,20,男,85.5),(李四,19,女,92.0),(王五,21,男,78.5);四、Python连接MySQL操作实践项目结构建议mysql_practice/ │ ├── connection.py # 数据库连接与操作 ├── create_table.py # 创建表 ├── insert_data.py # 插入数据 ├── query_data.py # 查询数据 ├── update_data.py # 更新数据 └── delete_data.py # 删除数据实训1连接MySQL数据库connection.py# connection.pyimportpymysqldefconnect_to_mysql():try:# 数据库连接参数connectionpymysql.connect(hostlocalhost,# MySQL服务器地址userroot,# 数据库用户名passwordyour_password,# 数据库密码请替换为实际密码databasetest_db,# 要连接的数据库名charsetutf8mb4,# 支持中文cursorclasspymysql.cursors.DictCursor# 返回字典格式结果)print(数据库连接成功)returnconnectionexceptExceptionase:print(f数据库连接失败{e})returnNone# 主程序测试if__name____main__:connconnect_to_mysql()ifconn:conn.close()✅ 重要提示将your_password替换为你实际设置的MySQL root密码。实训2插入数据insert_data.py# insert_data.pyimportpymysqldefinsert_student(name,age,gender,grade):connpymysql.connect(hostlocalhost,userroot,passwordyour_password,databasetest_db,charsetutf8mb4)try:withconn.cursor()ascursor:sqlINSERT INTO students (name, age, gender, grade) VALUES (%s, %s, %s, %s)cursor.execute(sql,(name,age,gender,grade))conn.commit()print(f成功插入学生{name})exceptExceptionase:print(f插入失败{e})conn.rollback()finally:conn.close()# 测试插入if__name____main__:insert_student(赵六,20,女,88.0)实训3查询数据query_data.py# query_data.pyimportpymysqldefquery_students():connpymysql.connect(hostlocalhost,userroot,passwordyour_password,databasetest_db,charsetutf8mb4)try:withconn.cursor()ascursor:sqlSELECT * FROM studentscursor.execute(sql)resultscursor.fetchall()print(查询结果)forrowinresults:print(fID:{row[id]}, 姓名:{row[name]}, 年龄:{row[age]}, 性别:{row[gender]}, 成绩:{row[grade]})exceptExceptionase:print(f查询失败{e})finally:conn.close()# 执行查询if__name____main__:query_students()实训4更新数据update_data.py# update_data.pyimportpymysqldefupdate_student(name,new_grade):connpymysql.connect(hostlocalhost,userroot,passwordyour_password,databasetest_db,charsetutf8mb4)try:withconn.cursor()ascursor:sqlUPDATE students SET grade %s WHERE name %saffected_rowscursor.execute(sql,(new_grade,name))conn.commit()ifaffected_rows0:print(f成功更新学生{name}的成绩为{new_grade})else:print(f未找到学生{name})exceptExceptionase:print(f更新失败{e})conn.rollback()finally:conn.close()# 测试更新if__name____main__:update_student(张三,90.0)实训5删除数据delete_data.py# delete_data.pyimportpymysqldefdelete_student(name):connpymysql.connect(hostlocalhost,userroot,passwordyour_password,databasetest_db,charsetutf8mb4)try:withconn.cursor()ascursor:sqlDELETE FROM students WHERE name %saffected_rowscursor.execute(sql,(name,))conn.commit()ifaffected_rows0:print(f成功删除学生{name})else:print(f未找到学生{name})exceptExceptionase:print(f删除失败{e})conn.rollback()finally:conn.close()# 测试删除if__name____main__:delete_student(王五)五、常见问题与解决方案问题原因解决方案pymysql.err.OperationalError: (2003, Cant connect to MySQL server)网络或MySQL未启动检查MySQL服务是否运行防火墙是否阻止Access denied for user rootlocalhost用户名/密码错误检查密码或重置root密码Unknown database test_db数据库不存在使用SQL命令创建数据库UnicodeEncodeError: charmap codec cant encode编码问题使用charsetutf8mb4SyntaxErrorSQL语法错误检查SQL语句是否正确使用参数化查询避免注入六、拓展知识使用连接池Connection Pool提升性能fromDBUtils.PooledDBimportPooledDB poolPooledDB(pymysql,5,hostlocalhost,userroot,password123456,databasetest_db)异常处理优化对数据库操作使用多重异常捕获。自动提交与事务管理conn.autocommit(False)# 多条SQL一起提交conn.commit()# 手动提交防止SQL注入始终使用参数化查询%s占位符。七、实训总结与评分标准可选项目分值说明环境准备10分正确安装Python、MySQL、驱动数据库连接15分成功连接并输出提示数据增删改查40分每项操作完整、正确代码规范15分有注释、模块化、命名规范问题排查10分能正确处理异常与错误总分100分八、附录快速入门总结使用pymysql.connect()建立连接。使用cursor().execute(sql, params)执行SQL。使用conn.commit()提交事务。使用conn.close()关闭连接。所有参数必须使用%s占位符防止SQL注入。实训完成提示所有脚本运行成功数据查询正确无异常报错即为实训完成importpymysqldefconnect_to_mysql():try:# 数据库连接参数connectionpymysql.connect(hostlocalhost,# MySQL服务器地址userroot,# 数据库用户名passwordroot,# 数据库密码请替换为实际密码databasetest_db,# 要连接的数据库名charsetutf8mb4,# 支持中文)print(数据库连接成功)returnconnectionexceptExceptionase:print(f数据库连接失败{e})returnNonedefinsert_student(name,age,gender,grade):sqlINSERT INTO students (name, age, gender, grade) VALUES (%s, %s, %s, %s)cursor.execute(sql,(name,age,gender,grade))conn.commit()print(f成功插入学生{name})defquery_students():sqlSELECT * FROM studentscursor.execute(sql)resultscursor.fetchall()# print(results)print(查询结果)forrowinresults:print(fID:{row[0]}, 姓名:{row[1]}, 年龄:{row[2]}, 性别:{row[3]}, 成绩:{row[4]})defdelete_student(name):sqlDELETE FROM students WHERE name %saffected_rowscursor.execute(sql,(name,))conn.commit()ifaffected_rows0:print(f成功删除学生{name})else:print(f未找到学生{name})defupdate_student(name,new_grade):sqlupdate students set grade %s where name %saffected_rowscursor.execute(sql,(new_grade,name))conn.commit()ifaffected_rows0:print(f成功更新学生{name}的成绩为{new_grade})else:print(f未找到可以修改的学生{name})# 主程序测试if__name____main__:connconnect_to_mysql()try:withconn.cursor()ascursor:insert_student(赵六,20,女,88.0)query_students()delete_student(赵六)update_student(李四,99.8)query_students()exceptExceptionase:print(f失败{e})conn.rollback()finally:conn.close()

更多文章