You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python与MySQL连接问题:数据无法提交至服务器导致表为空

问题分析与解决方案

核心问题:事务提交失败

你代码里的control.commit()是错误的——MySQL Connector的游标(cursor)对象没有commit()方法,事务提交必须调用连接(connection)对象的commit()方法。这就是为什么代码里commit()没有语法高亮,且数据实际没提交到数据库的原因。

其他潜在问题与优化点

  1. host = 'localhost '里的空格可能导致连接异常,建议去掉空格改为'localhost'
  2. 连接时已经指定了database='penguinx',无需再执行control.execute('use penguinx ;')
  3. 用format()拼接SQL存在SQL注入风险,且如果用户名/密码包含引号会直接报错,应该用参数化查询
  4. 代码缺少异常处理,无法捕获插入过程中的错误
  5. 未关闭游标和连接,可能导致资源泄漏

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:47:21