Python与MySQL连接问题:数据无法提交至服务器导致表为空
问题分析与解决方案
核心问题:事务提交失败
你代码里的control.commit()是错误的——MySQL Connector的游标(cursor)对象没有commit()方法,事务提交必须调用连接(connection)对象的commit()方法。这就是为什么代码里commit()没有语法高亮,且数据实际没提交到数据库的原因。
其他潜在问题与优化点
host = 'localhost '里的空格可能导致连接异常,建议去掉空格改为'localhost'- 连接时已经指定了
database='penguinx',无需再执行control.execute('use penguinx ;') - 用
format()拼接SQL存在SQL注入风险,且如果用户名/密码包含引号会直接报错,应该用参数化查询 - 代码缺少异常处理,无法捕获插入过程中的错误
- 未关闭游标和连接,可能导致资源泄漏
修改后的完整代码
import random import mysql.connector as boss # 修复host的空格,移除多余的use语句 connection = boss.connect(host='localhost', username='root', password='********', database='penguinx') control = connection.cursor() print('---------DATABASE OF PENGUIN-X USERS CREDENTIALS---------') def login_credentials(): try: ask_number_of_datachunks = int(input('How many credentials to be entered ? : ')) for i in range(ask_number_of_datachunks): ask_email = input('Enter Your Username : ') ask_pass = input('Enter Your password : ') assign_id = random.randint(1, 100) # 使用参数化查询,避免SQL注入和字符转义问题 sql = 'INSERT INTO credents VALUES (%s, %s, %s)' control.execute(sql, (assign_id, ask_email, ask_pass)) # 所有插入完成后统一提交,比循环里提交更高效 connection.commit() print(f"成功插入{ask_number_of_datachunks}条数据") except ValueError: print("请输入有效的数字") except boss.Error as e: print(f"数据库错误: {e}") # 出错时回滚事务,避免脏数据 connection.rollback() finally: # 确保游标和连接无论成功失败都会关闭 control.close() connection.close() login_credentials()
关键修改说明
- 将
control.commit()改为connection.commit():正确触发事务提交,确保数据写入数据库 - 参数化查询
%s:MySQL Connector用%s作为占位符,自动处理字符转义,避免SQL注入和语法错误 - 统一提交事务:循环外提交比每次插入都提交更高效,减少数据库IO操作
- 添加异常处理:捕获输入错误和数据库错误,出错时回滚事务
- 关闭资源:finally块确保游标和连接资源被正确释放
内容的提问来源于stack exchange,提问作者LunaticXXD10
相关产品推荐
相关产品推荐

